由于x86 - x64 - MSIL差异,TeamCity NUnit运行器失败

时间:2015-07-14 08:04:47

标签: nunit teamcity assembly-loading

我有一堆项目的解决方案,其中一些也有测试项目。这些都是为Any CPU平台编译的。

在TeamCity中,我有NUnit 2.6.4的构建配置,我在其上指定Platform: auto (MSIL)Version: 4.0

当我运行构建时,测试失败并显示以下消息:

NUnit error running tests in 'C:\BuildAgent\work\a58fc6cd9bf63032\JsonApi.Tests\obj\Release\JsonApi.Tests.dll' assembly
Loading assembly is compiled for v4.0.30319, MSIL
NUnit runner runtime is v4.0.30319, x64

更奇怪的是,当我刚刚关闭“首先运行最近失败的测试”(并且更改没有别的)时,我得到了以下内容:

NUnit error running tests in 'C:\BuildAgent\work\a58fc6cd9bf63032\JsonApi.Owin.Tests\obj\Release\JsonApi.Owin.Tests.dll' assembly
Loading assembly is compiled for v4.0.30319, MSIL
NUnit runner runtime is v4.0.30319, x86

请注意,在一种情况下,跑步者是x86,而在另一种情况下,跑步者是x64。在这两种情况下,它们都是否成功加载为MSIL编译的程序集。

我假设我的构建设置已关闭,但是什么?

3 个答案:

答案 0 :(得分:8)

根据您提供的more detailed log,构建失败的真正原因似乎是:

**\bin\**\*.Tests.dll

我认为这恰好是因为我在评论中链接的SO thread中提到的原因,即您正在运行来自 obj 文件夹的测试,而它应该是即可。但这仍然只是猜测,因为您没有提供NUnit步骤配置。

要解决此问题,您应该明确说明具有单元测试的程序集所在的路径。像这样:

$routeProvider.when("/management", {
                    templateUrl : "/experiment/management.html",
                    controller: 'managementController',

                }
在“列出汇编文件:”下。这样,来自 obj 文件夹的程序集将无法通过测试,请参阅this SO thread

答案 1 :(得分:0)

就我而言,我的文件夹正确,但是TeamCity已设置为使用nunit2.X进行测试,而我是针对nunit3进行编译的。在TeamCity更新测试步骤可以解决此问题。

答案 2 :(得分:0)

我也对此消息有类似的问题

检查正确的.NET Framework版本和过程平台(x64,x86,MSIL)是否同时用于测试运行程序设置和此计算机上涉及的程序集。

在我的案例中,原因是NUnit框架在代码和Teamcity运行器中具有不同的版本。