JUnit測試多執行緒

2021-10-03 12:16:36 字數 1434 閱讀 1371

單元測試是不支援多執行緒的,主線程結束之後,不管子執行緒有沒有結束,都會強制退出。但是我們可以通過控制主線程結束的時間來做多執行緒測試.

在junit的@test方法中啟用多執行緒,新啟動的執行緒會隨著@test主線程的死亡而死亡!導致沒有任何輸出

解決方法:

在@test方法中每建立乙個執行緒,就join一下,這樣我們新建的執行緒不死亡,test主線程也不會死亡。通過主線程休眠足夠長的時間來等待子執行緒執行完,這裡需要控制好主線程休眠時間才行。通過countdownlatch來等待所有子執行緒執行完畢,才結束主線程。

@test

public void testmultithread() catch (interruptedexception e)

});thread.start();

try catch (interruptedexception e)

system.out.println("@test執行緒執行完畢");

}輸出: 子執行緒執行完畢

@test執行緒執行完畢

可以看到test執行緒會在子執行緒執行完之後再結束。如果有多個子執行緒,就讓每個子執行緒都join一下,這樣test執行緒就會等待最後乙個子執行緒結束後再結束。這樣的好處是test執行緒在子執行緒結束後就可以結束,缺點是每個執行緒都要join

@test

public void testmultithread() catch (interruptedexception e)

});thread.start();

try catch (interruptedexception e)

system.out.println("@test執行緒執行完畢");

}輸出:子執行緒執行完畢

@test執行緒執行完畢

優點是簡單暴力,缺點也很明顯:test執行緒睡眠的時間要比子執行緒的執行時間長。如果不好估算子執行緒會執行多久還是不要用這種方法了。

@test

public void testmultithread() catch (interruptedexception e)

});thread thread2 = new thread(() -> catch (interruptedexception e)

});thread.start();

thread2.start();

try catch (interruptedexception e)

system.out.println("@test執行緒執行完畢");

}輸出:子執行緒1執行完畢

子執行緒2執行完畢

@test執行緒執行完畢

子執行緒執行完畢,主線程才結束

Junit 多執行緒測試

junit不能用來做多執行緒測試,因為junit不支援多執行緒。junit的testrunner的main方法原始碼 public static void main string args system.exit success exit catch exception e 從原始碼可以看出來,ju...

Junit測試中多執行緒問題

這兩天使用junit測試,測試 中為了模擬實際場景開啟多執行緒,有的情況下,測試的功能本身就是多執行緒活動。測試半天沒有達到預想的效果,仔細研究發現 junit主線程執行完畢就結束了,不管後台執行緒。場景一 如果測試 中有多執行緒,可使用countdownlatc解決。private int i 3...

Junit單元測試多執行緒的問題

今天下午很快完成了乙個介面的監控功能,然後屁顛屁顛地用junit開始單元測試。然後我就開始陷入崩潰的邊緣.監控結束後需要將監控結果以郵件的形式傳送給運營的小夥伴維護,前面測試還是很順利,到了開多執行緒發郵件時就不行了,程式也不報錯,也接收不到郵件。然後改 再測試,再冥思一會兒,再改再測試,還是無果,...