遇到的问题:这两天写项目需求遇见一个大坑,代码两下写完了,测试卡了我整整一天,报错信息显示各种连接异常(oss异常或者sql异常),导致我大部分时间都陷入查找oss为什么连接不上的问题,耗费了大量时间。后来发现是单元测试时执行了异步任务的问题!把异步任务取消后,程序立马跑通了,搞了我一整天的问题终于落在帷幕,避免以后再次卡住,在此记录junit单元测试在执行多线程情况下的问题和结论,并对比junit单元测试和主程序Main方法之多线程执行。
一. 先放结论
切记:junit不支持多线程!!!在junit单元测试中,当创建了新线程后,单元测试并不会等待主线程下启动的新线程是否执行结束,只要主线程结束完成,单元测试就会关闭,导致主线程中启动的新线程不能顺利执行完!
- 对于junit单元测试,当
@Test注释
的单元测试方法执行时,实际上junit时将该方法作为参数传给了junit.textui.TestRunner
类的main
函数,并通过main
函数进行执行(源代码如下)。
package junit.textui;
public class TestRunner extends BaseTestRunner {
//...
public static void main(String args[]) {
TestRunner aTestRunner = new TestRunner();
try {
TestResult r = aTestRunner.start(args);
if (!r.wasSuccessful()) {
System.exit(FAILURE_EXIT); // FAILURE_EXIT = 1
}
System.exit(SUCCESS_EXIT