2013-03-26 83 views
0

我正在編寫一個應用程序,它向串行端口發送一些命令並從中接收一些響應。在有些命令發送到端口調用線程時的某個時刻應該被鎖定,直到收到一些響應。所以我試圖爲它寫一個失敗的測試。測試是否調用函數鎖定當前線程

問題是測試不能在任何時候完成以便通過!!!!!

那麼解決方案是什麼?

編輯: 我可以在我的測試中創建另一個線程,並等待例如兩秒鐘後,檢查線程沒有完成,但它打破了簡單的法則,並使測試及時。

+1

爲什麼你的單位阻止呢?您應該能夠注入阻止代碼,並強制它阻止/不會隨意阻止(以及解除阻止超時)。我想你沒有注入所有的依賴。 – Tejs 2013-03-26 20:47:43

+0

@Tejs我從你的評論中得到的是,我可以創建另一個類來處理鎖定。所以當我想要功能阻止時,我可以使用該類。我也可以在單元測試中嘲笑那個類並注入它。謝謝。 – 2013-03-26 20:58:48

+2

你打算如何處理競賽條件?也就是說,如果在測試之前從串行端口*讀取的代碼完成*以查看鎖是否運行,該怎麼辦?或者如果從串行端口*讀取的代碼在測試之後纔開始,以查看是否執行了鎖定,那麼該怎麼辦? – 2013-03-26 21:23:48

回答

1

試圖讓鎖定一段時間,你認爲它是不合理的,之後你停止嘗試獲取鎖定並失敗它?

使用類似Monitor.TryEnter

+0

這是一個解決方案,但它使測試及時。還使用Monitor.TryEnter使測試依賴於生產代碼。 – 2013-03-26 20:31:35