2009-02-09 37 views
1

我最近在通過Cruise Control.NET和NAnt運行的構建服務器上安裝了MbUnit版本2.4.2.355,該程序位於帶有.NET Framework 3.5的Windows Server 2003計算機上安裝了SP1。MbUnit無法識別在Windows Server 2003上使用MSBuild編譯的測試程序集

我已經檢查了構建腳本的每個角落和裂縫,並且CC.NET上的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 \樹幹\ src \ PROJ \ Customer \ CustomerUnitTests \ bin \ Debug \ Company.CustomerUnitTests.dll [exec] Done Building Project 「C:\ dev \ PROJ.1 \ trunk \ src \ PROJ \ Customer \ CustomerUnitTests \ Company.CustomerUnitTests.csproj 「 (重建目標)。 [exec] Build 成功。 [執行] 「C:\ dev的\ PROJ3.1 \樹幹\ SRC \ PROJ \客戶\ CustomerUnitTests \ Company.CustomerUnitTests.csproj」 (重建目標)(1) - >

這意味着單元測試程序集的構建成功了。

事情是,在惡性輸出的結束是這樣的:

MbUnit的檢驗:[MbUnit的] MbUnit的 2.4.2.355測試轉輪[MbUnit的]中的否測試發現試件

我已經去了控制檯,並嘗試使用MbUnit.Cons.Exe手動測試編譯的程序集。結果如下:

  • 正確識別使用我的Windows XP SP3計算機構建的測試程序集,並且測試在我的計算機和其他任何開發計算機上正常運行。
  • 構建在運行Windows Server 2003的構建服務器中的測試程序集未被識別爲測試程序集;我試圖將這些文件複製到我的XP機器中,但它們也未被識別。

我現在想知道:測試組件和非測試組件之間有什麼區別?我確定它與TestTestFixture屬性有關,但在我的情況下,爲什麼在編譯爲測試的WinXP機器中編譯的程序集,以及編譯的Win2K3機器無法識別?

希望有人對此有所瞭解。

回答

4

首先檢查this issue
如果這沒有幫助,您需要檢查目標平臺(項目屬性,構建)爲「任何CPU」。嘗試使用反射器打開生成機器上生成的程序集。可能生成的文件已損壞。你也可以嘗試使用VS手動構建項目並在MbUnit中加載生成的測試。

+0

+1表示反射器。這就是我認爲的第一件事 - 看看不同機器的構建輸出是否有差異。 – 2009-02-24 02:30:23

2

關於是否有任何特定的組件被認爲是測試組件,沒有根本的區別。

我的猜測是你的開發機器正在運行一個與你的構建服務器稍有不同的MbUnit版本。 MbUnit v2具有跨版本兼容性問題,可能導致它無法正確識別測試(因爲它試圖加載與安裝的不同版本的框架程序集)。

順便提一句,這些問題已經在MbUnit v3中得到很好的解決。

如果您還沒有這樣做,您可能會發現在源代碼樹中安裝MbUnit的副本很有幫助。這將確保始終使用一致的版本。

相關問題