2012-01-06 130 views
2

我調用傳遞參數的方法。如果這個參數等於某個特定值,那麼一個線程會重複執行一些操作,直到它停止。在每一次重複中,一些值都會改變。
有沒有辦法從JUnit檢查這些值?JUnit測試:如何測試線程的結果

+1

讓我們看看一些代碼。 – dan 2012-01-06 12:52:22

回答

3

如果你正在產生線程,你不再是單元測試 - 你是集成測試。重構你的代碼,以便改變這個'值'的邏輯可以在沒有線程產生的情況下被測試。如果它在沒有產生線程的情況下工作,那麼它會在產生線程時工作(我知道我已經爲自己設置了一個講座...您需要確保您正確地同步任何可能共享的變量,而不要有任何可能導致死鎖的代碼)。

沒有看到代碼,很難嘗試建議測試它的方法。但是,如果您正在產生線程,則絕對不是單元測試。

+1

我想說,需要一個'tick()'方法來封裝單個重複並對其進行單元測試。如果它返回那些「一些值」而不是改變對象的字段,那麼測試(和整體解耦)就更好了。 – 2012-01-06 13:00:50

+0

@Victor同意,這是更好的線程行爲封裝。不過,我希望整個行爲單元在我開始勾選' – BeRecursive 2012-01-06 13:02:02

+0

之前進行測試。對不起,沒有提供任何代碼。這是我大學項目的一部分,我恐怕我不能這樣做。我知道我的代碼是可以工作的,但是因爲我必須在項目中包含一些JUit測試,所以我想知道是否有任何方法來測試這部分代碼。我創建一個線程,線程以指定的時間間隔重複。所以,我無法像使用JUnit那樣測試它。謝謝! :) – anna 2012-01-06 13:35:29

0

如果您試圖測試以確定每個迭代是否適當地修改了這些值,則使用期望的輸入調用迭代代碼並測試預期的輸出。測試每個peice的隔離:

僞Java代碼:

for each (file : files) { 
    doSomething(file); // this updates some running totals or something 
} 

然後你想要寫一些單元測試,你要測試,看看每個輸入打電話給你doSomething()如果值更新適當的(模擬哪裏必要)。然後做一個集成測試,讓線程產生並檢查結果值。