2010-01-20 69 views
7

我對TDD相當陌生,但一直在使用它足夠長的時間來理解如何使用模擬,存根,依賴注入,控制反轉來解決「類似」問題...但由於某些原因,我感到非常不安依賴注入並傳入「IThread」(或類似)。如何單元測試產生線程的方法?

給它一些基本的上下文 - 我試圖給遺留應用程序添加單元測試,我不確定如何單元測試構造函數產生兩個線程的類。

是使用依賴注入的唯一選擇嗎?

如果是這樣,線程帶來的功能如何?就其本身而言,線程既運行(true)循環,也永不退出循環(除非應用程序正在終止)。在循環內部有合理的代碼塊,這是我真正想要測試的代碼。

更糟糕的是,我不想拉的所有功能了循環進入公共方法(我只測試公有方法在另一個項目中存在我的測試),因爲它真的會降低易於在代碼中的其他地方使用該類。

有什麼建議嗎?

回答

5

您可否將功能拉入內部方法並使用InternalsVisibleTo來代替?即使你真的希望他們是私人的,這是一個合理的妥協解決方案。

如果你的線程通常會永久運行,這確實使它很難測試......並且聽起來像你真的應該單獨測試「線程做什麼」部分,如果它們不是取決於在單獨的線程中。

偶爾有用的一個選項是擁有一個IScheduler類型的接口 - 要求在任何合適的地方執行動作;生產人員會創建一個新線程,但您的測試人員可以在現有線程(或您在測試代碼中控制的線程)內運行該操作。我不確定這適合你的情況,線程將永遠運行,但你可能想在其他情況下考慮它。

+0

是的,這是一個合理的妥協,因爲我正在測試的類是在一個類庫中,只用於外部。這將工作得很好,謝謝! – InvertedAcceleration 2010-01-20 11:34:05