問題描述

個人在工作上進行開發、維護或重構程式碼,必須通過整合測試,才能合併回 dev branch。個人在完成工作後,習慣使用 Resharper 來執行整合測試,但偶爾會遇到測試結果不太一致的情況,讓人頗困擾。



因為有 CI/CD 伺服器執行整合測試,故在不一致情況發生時可以透過 CI/CD伺服器執行整合測試,短期內沒有太在意這問題 (被揍)。但長期下來挺不方便的,在閒暇之餘花一點時間找問題,並記錄下操作步驟僅供參考。


解決方法

環境
Visual Studio 2017
JetBrains ReSharper Ultimate 2017.3.5


Step 1 清掉 ReSharper cache (此步驟不知道是否有影響)
ReSharper →  Options  →  Environment →  General →  Clear caches



Step 2. Tools→  Unit Test→  取消勾選 Shadow-copy assemblies being tested (uncheck Shadow-copy assemblies being tested)


Step 3. 重新執行 Unit Test Runner,不穩定結果已經排除。 


事後查詢可能的原因為:
1. 使用 NUnit 套件,Unit Test Runner 執行時會重新建置 (Rebuild),但建置出來的位置非專案下\bin 資料夾內,導致執行測試時結果不正確 (疑似整合測試時,啟動不除錯程式為原專案底下,但執行 Unit Test Runner 位置卻在 temp folder 導致)。
2. Shadow-copy 會讓執行 Unit Test Runner 時重新建置 (Rebuild),並將 assemblies 複製到 temp file 裡並執行測試。原專案 assemblies 內容不會被變更,所以執行單元測試/整合測試時,可能有測試不正確情況發生。
註:雖然關閉Shadow-copy 解決了不穩定的情況,但根本還需要詳細調查,上述提供可能原因僅供參考,歡迎前輩指點 :)


參考資料

1. Resharper runs UnitTest from different location - Stack Overflow