2012-03-08 85 views
2

我們正在使用的痣,以測試我們的一些遺留代碼獲得存根和沒有痣。目前我們使用MSTest或者Resharper的測試運行器在本地運行時,所有單元測試都會通過。然而,當在構建服務器上運行時(我們使用稍微修改的TFS 2010工作流,使用MSBuild和MSTest),我們所有的Moles測試都失敗了。在我的構建服務器,我只

當我查看原因時,這是因爲在生成服務器上生成.Moles.dll時,只創建了存根(以「S」爲前綴的類),但沒有一個Moles類(類前綴爲「 M「)。

我們的代碼仍然編譯,因爲我們的開發者之一創建了一個框架摩爾簡化語法,它使用表達式和委託,以與痣的工作感覺像起訂量的工作。該框架使用Reflection來獲取方法的Moles版本,但由於創建了「M」類,因此在嘗試獲取方法時拋出NullReferenceException,因爲對Assembly.GetType的調用返回null。

編輯:Pex的&摩爾庫的最新版本安裝在構建服務器上。

編輯2:這裏是命令行是在MSBuild的日誌

"C:\Program Files (x86)\Microsoft Moles\bin\moles.exe" @"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\obj\Debug\Moles\moles.args" 

和「moles.args」

Common.Logging.moles;DeltaNetUtils.moles;System.configuration.moles /molesfilesonly /referenceassemblies:"<lots-of-dll-files>" /cachepath:"C:\Program Files (x86)\Microsoft Moles\bin\..\MolesAssemblies" /intermediatepath:"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\obj\Debug\Moles" /outputpath:"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\MolesAssemblies" /clrversion:v4.0.30319 /targetframeworkversion:v4.0 
+0

不是建立在安裝Moles上的M前綴類。也許你需要在TFS構建服務器安裝, – 2012-03-08 22:03:20

+0

它安裝,而且,我還沒有談論的鼴鼠版本我們班的不是標準的.NET類 – 2012-03-08 22:11:27

+0

我還沒有與我們TFS構建服務器集成痣(仍評估框架),但似乎Moles組件生成沒有被集成到構建過程中。我認爲xxx.Moles生成是通過右鍵單擊解決方案並重新運行.mole一代來執行的手動步驟。有一個MolesAssembly文件夾不包含在項目中,因此如果它沒有檢入到TFS中,那麼它們在運行時將不可用。您是否在TFS構建警告中解決了關於在解決方案/項目構建中缺少xxxx.Moles程序集引用的問題? – 2012-03-08 23:04:09

回答

0

這樣的內容,我再看看這個在今天我想我想出了這個問題,並且這簡直令人沮喪。

我用的是摩爾的2個不同的測試項目,並在其中的一個我指定正是我想要的痣使用assembly.moles xml文件哪些類。這個必須在我的大部分測試之後被編譯,因此它在Binaries目錄中覆蓋了它。

我刪除從該文件的具體細節,現在它看起來像我的測試都通過和正在創建的MXXX類型。