我的應用程序有幾個單元測試項目。所有其他項目和單元測試項目都構建到一個公共輸出目錄。使用msbuild任務,我收集所有單元測試程序集並運行vstest.console.exe來測試這些程序集。vstest.console拋出System.IO.FileNotFoundException
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\..\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "Assembly1.UnitTest.dll" "Assembly2.UnitTest.dll" /Platform:x64 /Framework:Framework40 /InIsolation /Logger:trx
這導致異常:System.IO.FileNotFoundException:未能加載文件或程序集「someassembly.dll」或它的一個依賴。指定的模塊無法找到。
當我爲單個單元測試程序集執行vstest.console.exe時,上述異常不會發生。進一步的調查瞭解到,當一次測試多個程序集時,vstest.console正在將測試程序集和依賴程序集複製到「testresults」目錄中的「out」目錄。然而,並非所有需要的程序集都是由項目引用的,而是手動複製到公共輸出目錄。這些程序集在「testresults」的「out」目錄中缺少並導致System.IO.FileNotFoundException。
使用MSTest,我可以通過添加DeploymentItem來使用指向公共輸出目錄的配置文件。對於vstest.console,這不起作用了。
如何解決此問題?我不想使用「out」目錄。從公共輸出目錄運行我的單元測試就好了。
PS。我在TFS 2013上有構建定義的問題。我的構建定義正在收集* .unittest.dlls並使用Test Runner執行這些定義。
在我們的場景中,我們有兩個類庫項目,我們姑且稱之爲A和B.兩者都有自己的單元測試。 A將通過我們自己的NuGet存儲庫編譯爲A.dll和B引用A.dll。我們通過TFS 2015爲我們的存儲庫中的所有單元測試程序集運行vstest作爲構建步驟。因此,B期望NuGet提供的修訂版本,而不是由A構建的修訂版本,這會導致System.IO.FileLoadException。禁用部署可修復此衝突,但會導致新問題:我們使用DeploymentItem屬性進行了一些單元測試。部署禁用時不會部署這些文件。 – HeBu 2016-08-10 13:33:34
拯救了我的生命! – 2016-12-06 16:17:22