【问题标题】:Forcing nunit console runner to use CLR 4.5强制 nunit 控制台运行程序使用 CLR 4.5
【发布时间】:2014-11-19 14:15:17
【问题描述】:

我有以下简单的测试用例:

var uri = new Uri("http://foo.com/bar%2Fbaz");
Assert.AreEqual("http://foo.com/bar%2Fbaz", uri.AbsoluteUri);

此测试在 .NET 4 上失败,但在 .NET 4.5 上通过,我可以使用 ReSharper 测试运行器进行测试,它提供了方便的 CLR 选择菜单。

但如果我使用 nunit 控制台运行程序运行此测试,如下所示:

nunit-console.exe /framework:4.5 "C:\Data\Projects\UriTest\bin\Debug\UriTest.dll"

我的测试失败了。我什至修改了 nunit-console.exe.config 并添加了这个:

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />

添加这个之后,我开始从跑步者那里得到这个输出:

Runtime Environment -
   OS Version: Microsoft Windows NT 6.2.9200.0
  CLR Version: 4.0.30319.34209 ( Net 4.5 )

ProcessModel: Default    DomainUsage: Single
Execution Runtime: v4.5

但我的测试仍然失败。知道为什么会这样吗?

【问题讨论】:

  • 您找到解决方案了吗?我遇到了完全相同的问题...
  • 我可以使用 NUnit 2.6.4 进行复制。还试图强制 NUnit 3 使用 4.0,但我的测试通过了...

标签: unit-testing nunit test-runner


【解决方案1】:

在更深入地研究了这个问题之后,这是我从不同论坛收集的信息。

首先,它应该自动检测运行时。如果没有(这似乎是您的情况),您始终可以使用 /framework 命令选项强制使用适当的运行时框架。

您在 nunit-console.exe.config 中的内容会强制 NUnit 运行器使用指定的运行时。如果您的程序集在不同的 .NET 版本中,NUnit 将在单独的进程中运行它们以强制使用框架版本。

请参阅documentation for NUnit 2.6.2

命令行中的内容不应该是 /framework:4.5 而是 /framework:net-4.5

下一步是查看您的测试,看看是否有特定的原因导致它失败。

请发表评论以获取更多信息。

【讨论】:

  • 感谢您的回答,但这似乎不起作用。首先,clr.bat 没有随 NUnit 2.6.3 一起提供,新文档也没有提到这一点。此外,旧文档说“注意:如果您在配置文件中使用 部分,则它优先于此选项。”这实际上是我对 .exe.config 文件所做的。
  • 使用 /framework:net-4.5 开关仍然失败。您可以轻松重现:1. 使用 .NET 4.5.2 使用此 [Test] 创建一个 DLL 项目 2. 构建它 3. 通过 nunit-console(或 nunit GUI)运行它
  • 如果您在使用 nunit-console 的框架命令行参数时遇到问题,请尝试在参数名称和值之间使用等号 (=) 而不是冒号 (:) 的 /framework=net-4.5
  • 我遇到了与 OP 相同的问题,使用 /framework 甚至将 v4.5 显示为 nunit-console 中选择的运行时,但测试仍然失败,因为它没有真正使用我所能使用的框架告诉。
【解决方案2】:

在 .NET 4.0 Framework 中,存在一个关于编码斜线值的错误。你可以查看描述here。在 4.5 中,它被修复以使结果符合 RFC-3986。所以,这就是为什么 4.0 和 4.5 会有不同的行为。

【讨论】:

  • 是的,我知道这个变化,我遇到的问题是 nunit 测试运行程序似乎可以与 .NET 4 一起使用,即使我试图强迫他们使用 .NET 4.5
  • @huseyint,您是否在运行测试之前针对 4.5 构建解决方案?
  • 是的,我的解决方案是专门针对 .NET 4.5.2 构建的。
  • 这个 cmd 示例可能会对您有所帮助(针对指定版本构建解决方案,然后运行 ​​nunit-console):link
猜你喜欢
  • 2010-11-04
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 2019-03-20
  • 2011-01-22
  • 1970-01-01
相关资源
最近更新 更多