12

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

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

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

4

2 回答 2

8

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

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

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

请参阅NUnit 2.6.2 的文档

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

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

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

于 2014-11-19T14:24:29.623 回答
0

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

于 2014-11-19T14:35:12.167 回答