Unit testing 强制nunit控制台运行程序使用CLR 4.5

Unit testing 强制nunit控制台运行程序使用CLR 4.5,unit-testing,nunit,test-runner,Unit Testing,Nunit,Test Runner,我有以下简单的测试用例: var uri = new Uri("http://foo.com/bar%2Fbaz"); Assert.AreEqual("http://foo.com/bar%2Fbaz", uri.AbsoluteUri); 此测试在.NET4上失败,但在.NET4.5上通过,我可以使用ReSharper测试运行程序进行测试,它提供了一个方便的CLR选择菜单 但如果我使用nunit console runner运行此测试,如下所示: nunit-console.exe/fra

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

var uri = new Uri("http://foo.com/bar%2Fbaz");
Assert.AreEqual("http://foo.com/bar%2Fbaz", uri.AbsoluteUri);
此测试在.NET4上失败,但在.NET4.5上通过,我可以使用ReSharper测试运行程序进行测试,它提供了一个方便的CLR选择菜单

但如果我使用nunit console runner运行此测试,如下所示:

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" />

但我的测试还是失败了。知道为什么会发生这种情况吗?

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

首先,它应该自动检测运行时。如果没有,您可以使用/framework命令选项强制框架使用适当的运行时

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

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

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


有关更多信息,请发表更多评论。

在.NET4.0框架中,存在有关斜杠值编码的错误。你可以查看描述。在4.5中,它被固定为使结果RFC-3986符合要求。因此,这就是为什么您在4.0和4.5中有不同的行为。

谢谢您的回答,但这似乎不起作用。首先,clr.bat没有随NUnit 2.6.3一起提供,新文档也没有提到这一点。另外,旧文档说“注意:如果您在配置文件中使用一个节,它优先于此选项。”这实际上就是我对.exe.config文件所做的操作。使用/framework:net-4.5开关仍然失败。你可以很容易地复制这一点:1。使用.NET 4.5.2创建具有此[Test]的DLL项目。建造它3。通过nunit控制台(或nunit GUI)运行它。如果在nunit控制台中使用framework命令行参数时遇到问题,请尝试使用参数名称和值之间具有相等(=)而不是冒号(:)的
/framework=net-4.5
,使用/framework甚至将v4.5显示为nunit控制台中所选的运行时,但测试仍然失败,因为据我所知,它并没有真正使用该框架。是的,我意识到了变化,我遇到的问题是nunit测试运行程序似乎与.NET 4一起工作,即使我试图强迫他们使用.NET 4。5@huseyint,在运行测试之前,您是否根据4.5构建解决方案?是的,我的解决方案是针对.NET 4.5.2构建的。这个cmd示例可能会帮助您(根据指定版本构建解决方案,然后运行nunit控制台):您找到解决方案了吗?我遇到了完全相同的问题…我可以用NUnit 2.6.4重新编程。还试图强迫NUnit3使用4.0,但我的测试通过了。。。
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