1

我最近在安装了 .NET Framework 3.5 SP1 的 Windows Server 2003 机器上通过 Cruise Control.NET 和 NAnt 运行的构建服务器上安装了 MbUnit 版本 2.4.2.355。

我检查了构建脚本的每个角落,CC.NET 上的 NAnt 输出报告告诉我测试项目构建良好。

这是 NAnt 脚本:

<target name="compiletests" description="Compiles unit tests separately">
    <exec program="${netframework.dir}\msbuild.exe">
        <arg line="C:\dev\PROJ3.1\trunk\src\PROJ\Customer\CustomerUnitTests\Company.CustomerUnitTests.csproj  /t:Rebuild /p:Configuration=Debug"></arg>
    </exec>
</target>

输出是ff:

[exec] Company.CustomerUnitTests -> C:\dev\PROJ.1\trunk\src\PROJ\Customer\CustomerUnitTests\bin\Debug\Company.CustomerUnitTests.dll [exec] 完成构建项目“C:\dev\PROJ. 1\trunk\src\PROJ\Customer\CustomerUnitTests\Company.CustomerUnitTests.csproj”(重建目标)。[执行] 构建成功。[exec] "C:\dev\PROJ3.1\trunk\src\PROJ\Customer\CustomerUnitTests\Company.CustomerUnitTests.csproj" (重建目标) (1) ->

这意味着单元测试程序集的构建成功。

事情是,在 NAnt 输出的末尾是这样的:

mbunit-tests:[mbunit] MbUnit 2.4.2.355 测试运行程序 [mbunit] 在测试中找不到测试程序集

我已经使用控制台并尝试使用 MbUnit.Cons.Exe 手动测试编译的程序集。结果是这样的:

  • 使用我的 Windows XP SP3 机器构建的测试程序集被正确识别,并且测试在我的机器上正确运行,并且在任何其他开发机器上都可以正常运行。
  • 在运行 Windows Server 2003 的构建服务器中构建的测试程序集不会被识别为测试程序集;我尝试将这些文件复制到我的 XP 机器中,但它们也无法识别。

我现在想知道:测试程序集和非测试程序集有什么区别?我确定它与TestandTestFixture属性有关,但在我的情况下,为什么在 WinXP 机器中编译的程序集编译为测试,而那些编译 Win2K3 机器的程序集无法识别?

希望有人对此有所了解。

4

2 回答 2

4

首先检查这个问题
如果这没有帮助,您需要检查目标平台(项目属性,构建)是否为“任何 CPU”。在此之后尝试打开使用 Reflector 在您的构建机器上生成的程序集。可能是生成的文件已损坏。您也可以尝试使用 VS 手动构建项目并在 MbUnit 中加载生成的测试。

于 2009-02-21T09:48:32.910 回答
2

任何特定程序集是否被视为测试程序集没有根本区别。

我的猜测是您的开发机器运行的 MbUnit 版本与您的构建服务器略有不同。MbUnit v2 存在跨版本兼容性问题,可能导致它无法正确识别测试(因为它尝试加载与安装不同版本的框架程序集)。

顺便说一句,这些问题在 MbUnit v3 中已基本解决。

如果您还没有这样做,您可能会发现在源代码树中安装 MbUnit 的副本很有帮助。这将确保始终在任何地方使用一致的版本。

于 2009-02-09T16:26:54.210 回答