MSTest 無法退出

2021-07-15 15:43:40 字數 973 閱讀 7277

最近給系統配置持續整合工具. 我們用 stash 做原始碼管理, 用 teamcity 來做編譯, 並通過 teamcity 來分析單元測試覆蓋率和**質量, 把結果發布到 sonar 頁面上面. 在 teamcity 裡面, 我們配置了 vs test runner --> mstest 來執行單元測試. 現在的問題是我們所有的單元測試都能夠通過. 但是 mstest.exe 執行完不能正常退出, 一直卡在: default test setting. 上網查了說是可能單元測試裡面開了乙個死迴圈執行緒, 單測結束後執行緒沒有完全退出, 導致 mstest.exe 也沒法退出. 據說 機器上同時安裝 vs 2010, vs 2012 會有這個問題, 可以通過安裝 windows 補丁包來解決這個問題, 但是由於我們的測試在別人的伺服器上面執行, 我們不能去安裝補丁包, 只能找出到底是哪個測試導致測試程序無法退出. 

由於無法確認是哪個測試導致這個問題, 只能退回到上一次 check in  的**, 然後往裡面一點點加上新改動, 每次加上一點改動就在本地執行自動測試, 看是否測試程序無法退出. 注意執行 visual studio 整合的單測會發現所有測試都通過, 但是沒法發現測試程序無法退出的問題, 可以在 cmd 控制台執行 mstest. 

在本地執行 mstest.exe, cmd: mstest.exe /testcontainer projname/test.dll /noisolation

這樣一點點加上新改動, 發現是在把之前的乙個測試刪除之後導致的問題. 也就是說這個單元測試必須被執行, 否則測試程序就會卡住. 檢視測試**, 發現那裡面設定了兩個靜態變數, 這兩個變數會影響到別的測試項. 如果這兩個測試項的值是合法的值, 那麼另乙個測試方法就會執行的時候就會啟動乙個執行緒, 這個執行緒永遠不會退出. 在這次改動之前, 由於我們在這個測試裡面設定了不合法的值, 所以另外那個測試就不會啟動執行緒, 但是在這個改動裡面, 我把這個測試方法刪掉了, 然後兩個靜態變數就一直都是合法的了, 於是導致另外測試方法會去啟動執行緒, 於是 mstest 就無法退出了. 

解決forEach無法退出迴圈問題

做專案時,習慣使用foreach來代替for迴圈,我們都知道for迴圈裡要跳出整個迴圈是使用break,但在陣列中用foreach迴圈如果要退出整個迴圈使用break會報錯,return也無法跳出迴圈。也就是說foreach遍歷並不能被終止 在fromeach中使用break let arr 1 2...

vs 命令測試工具mstest

在我的專案中使用的vs自帶測試工具mstest而不是nunit,有時需要自動化測試vs中的 便於整合,需要在命令列執行。在vs安裝目錄下會有乙個mstest.exe程式,例如我的機器上,該程式的位置是 c program files microsoft visual studio 8 common7...

使用MS Test進行單元測試

ms test也可以方便的進行單元測試,可以通過visual studio很方便的建立單元測試。新增對待測試工程的引用,即可方便的開始單元測試。最基本的一些測試使用如下 using system using microsoft.visualstudio.testtools.unittesting n...