【问题标题】:NUnit for Portable Class Library tests用于可移植类库测试的 NUnit
【发布时间】:2016-09-14 23:37:14
【问题描述】:

尝试使用 NUIt 运行在常规 PCL 库中编写的测试。它只是一个空项目,只有一个测试什么都不做。

NUnit 控制台运行器显示消息

NUnit 3.0 驱动程序不支持 NUnit 的可移植版本。使用特定于平台的运行器。

Resharper 跑步者因消息而崩溃

Unit Test Runner 未能运行测试

和堆栈跟踪:

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(String assemblyString, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo)
   at System.AppDomain.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes)
   at System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes)
   at NUnit.Engine.Drivers.NUnit3FrameworkDriver.Load(String testAssemblyPath, IDictionary`2 settings)
   at NUnit.Engine.Runners.DirectTestRunner.LoadPackage()
   at NUnit.Engine.Runners.AbstractTestRunner.Load()
   at NUnit.Engine.Runners.MasterTestRunner.LoadPackage()
   at NUnit.Engine.Runners.AbstractTestRunner.EnsurePackageIsLoaded()
   at NUnit.Engine.Runners.MasterTestRunner.NUnit.Engine.ITestRunner.Explore(TestFilter filter)
   at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.<>c__DisplayClass1.<RunTests>b__0() in c:\Build Agent\work\10282fe47e6c6213\Psi.Features\UnitTesting\nUnit\Runner30\Src\BuiltInNUnitRunner.cs:line 79
   at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.WithExtensiveErrorHandling(IRemoteTaskServer server, Action action) in c:\Build Agent\work\10282fe47e6c6213\Psi.Features\UnitTesting\nUnit\Runner30\Src\BuiltInNUnitRunner.cs:line 623

根据this 的评论,PCL 应该可以工作,但不能。如果我们在没有 Xamarin 的情况下使用 PCL,执行测试的选项有哪些?

【问题讨论】:

    标签: .net unit-testing xamarin nunit portable-class-library


    【解决方案1】:

    要运行可移植测试,您需要使用NUnitLite 创建一个自执行测试运行器。基本上,您创建一个 .NET 4.5.x 控制台应用程序,参考 NUnitLite 和您的测试程序集。然后,您运行控制台应用程序来运行您的测试。有关步骤,请参阅 Testing .NET Core using NUnit 3,但它使用 .NET Core 而不是 .NET 4.5 来运行测试。

    如果您正在测试的程序集是 PCL,但以 .NET 4.5 作为目标,更简单的方法是将您的测试程序集创建为 .NET 4.5.x 并引用正在测试的 PCL 程序集。这将使您的测试引用完整版本的 NUnit 框架,并允许您在 Visual Studio 或 Resharper 中运行测试。仅仅因为您正在处理的代码是 PCL,并不意味着您的测试需要是 PCL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      相关资源
      最近更新 更多