2010-07-28 179 views
2

我們有一個單元測試的子集,直到最近一直通過Visual Studio運行。我現在正在開發一個可以運行測試的持續集成設置。所有的測試通過Visual Studio運行時通過,但是當我嘗試從命令行使用mstest運行它們時,它們會失敗,並顯示「TypeInitializationException」,表示無法找到該類型的dll文件。當從命令行運行mstest時TypeInitializationException

System.TypeInitializationException: The type initializer for foo.bar_Accessor' threw an exception. 
---> System.IO.FileNotFoundException: Could not load file or assembly 'foo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. 
The system cannot find the file specified.Assembly manager loaded from: 
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 

有問題的dll是單元測試項目中的項目引用。還有一個測試參考可以創建該類的foo.bar_Accesor版本。

我注意到,當測試通過visual studio運行時,會創建一個包含IN和OUT文件夾的「Coverage _timestamp」文件夾。 OUT文件夾中包含foo.dll和foo_accesor.dll等。

當從命令行運行測試時,會創建一個僅包含OUT文件夾的「username _timestamp」文件夾。 OUT文件夾中包含foo_accesor.dll,但不包括錯誤消息中提到的foo.dll。

+0

有同樣的問題。有沒有找到解決方案? – Peter 2012-01-06 07:45:48

回答

0

我設法用/noisolation開關解決了我們的問題。此開關描述爲:

在MSTest.exe進程中運行測試。此選擇可以提高測試運行速度,但會增加MSTest.exe進程的風險。

我的MSBuild腳本現在看起來是這樣的:

<Target Name="Test" DependsOnTargets="Compile"> 
    <PropertyGroup> 
    <TestSuccessOrNot>1</TestSuccessOrNot> 
    </PropertyGroup> 
     <Exec Command='"$(VS100COMNTOOLS)..\IDE\mstest.exe" /noisolation /testcontainer:"C:\path\to\test.dll"' > 
    <Output TaskParameter="ExitCode" PropertyName="TestSuccessOrNot"/> 
    </Exec> 
    <Error Condition="$(TestSuccessOrNot) == 1" Text="Unit tests fail!"/> 
</Target>