0

有沒有人見過這種非常奇怪的行爲?Visual Studio單元測試 - 奇怪的行爲

  1. 我有一個解決方案whith70個單元測試。他們都通過我的開發機器。
  2. 無論何時我提交我的更改,我們的持續集成過程都將啓動,並且構建框最終將運行相同的70個單元測試。
  3. 構建箱中只有一個測試始終失敗。
  4. 錯誤是在一行中,只有從我們的單元測試數據庫獲得記錄。 (我知道它吸收單元測試依賴於數據,但請不要專注於此,因爲它現在不相關)
  5. 最奇怪的是,當我登錄自己的構建箱,打開相同的Visual Studio解決方案並手動啓動單元測試。結果:全部通過!

有沒有人有過這種奇怪的情況?我猜測Cruise Control.NET和MSTest有一些奇怪的事情發生嗎?

+0

是的,我的猜測是用戶運行測試沒有有效的憑據。確保你的測試項目中有一個app.config文件,或者至少將它鏈接到你真實的配置文件。 – RPM1984 2010-10-06 06:09:07

回答

0

感謝您的意見,但它根本沒有任何與憑證有關。 我發現在特定的測試之前運行的其他測試將使我的單元測試數據庫處於不一致的狀態,因此導致有問題的測試出錯。 讓你的單元測試依賴數據不是一個好習慣,所以除非你像我一樣非常注意它,這是給大家的建議:不要依靠數據來做你的單元測試!確保你擁有所有的好東西,特別是一個好的IOC /依賴注入器容器,這樣你的類就可以鬆散耦合了,你可以輕鬆地模擬任何你想要單元測試的界面!

1

當然,您的單元測試運行器會生成一個良好的日誌,顯示確切的異常消息或錯誤?猜測它有點毫無意義,但「拒絕訪問」類錯誤將是一個明顯的候選。設置您使用的任何dbase引擎(您也忘了提及這一點),以便爲運行測試的用戶帳戶提供對錶的粗略訪問。

0

如說另一個答案,它並沒有什麼太大的意義去猜測它的時候周圍有詳細的日誌...

但因爲我有這種情況好幾次,這裏有一個猜測反正: CI服務器用於運行測試的帳戶可能沒有適當的數據庫權限。這也可以解釋爲什麼當你手動運行它(然後用你的用戶帳戶)時,相同的測試成功...

HTH! 托馬斯

0

如果您想要在構建服務器上運行系統測試,或者希望能夠在任何機器(包括您自己的機器上)上正確運行,那麼您必須確保它們的狀態是獨立的。

對於您的情況,您應該讓每個測試init準備其使用的數據庫(通過複製基於文件的數據庫或通過清空/填充基於服務的數據庫)。每個測試也應該嘗試撤銷其更改(刪除文件或空數據庫),但不要假設其他測試已成功完成。