Junit不能用來做多線程測試,因為Junit不支持多線程。
Junit的TestRunner的main方法源碼
public static void main(String args[]) {
TestRunner aTestRunner = new TestRunner();
try {
TestResult r = aTestRunner.start(args);
if (!r.wasSuccessful()) {
System.exit(FAILURE_EXIT);
}
System.exit(SUCCESS_EXIT);
} catch (Exception e) {
System.err.println(e.getMessage());
System.exit(EXCEPTION_EXIT);
}
}
從源碼可以看出來,Junit是監控的main線程,一旦main線程執行結束就直接exit了,根本不管子線程的死活。
知道了Junit的原理,我覺得可以嘗試實現一下支持多線程,不就是讓main線程不要退出嘛,簡單。
public class MyTest {
private static final int LEN = 20;
//存儲線程數量Active Thread Count
private static final int ATC = Thread.activeCount();
@Test
public void testCase(){
List<String> list = new ArrayList<>();
for(int i = 0;i<LEN;i++){
new Thread(() -> {
System.out.println(Thread.currentThread().getName());
},"T"+String.valueOf(i)).start();
}
//只要線程數量比ATC多就說明,自己創建的線程還有沒執行完的。
while(Thread.activeCount() > ATC){}
}
}
曲線救國