Junit-使用thread.sleep的测试用例不等待线程完成

时间:2019-08-25 18:49:53

标签: java junit

我有几个junit测试用例,其中我在调用方法doComplexOperation(),该方法启动一个新线程并在每个循环中以100ms的睡眠打印0-5。

当我分别运行每种测试方法时,它们都会产生不同的结果:

  • 主要方法->打印0-5
  • test1->打印0或根本不打印任何内容
  • test2->打印0-3
  • test3->打印0-5

在所有这些测试中,主线程不等待在doComplexOperation中创建的线程完成。我期望在运行main()方法或@Tests

时获得类似的输出

JUnit上是否有配置,以便我可以将所有这些测试打印为0-4?

import org.junit.jupiter.api.Test;

class Tests {

    public static void main(String[] args) {
        doComplexOperation();
    }

    @Test
    void test1() {
        doComplexOperation(); //Prints 0 OR doesn't print anything at all 
    }

    @Test
    void test2() {
        doComplexOperation(); //Prints 0 - 3
        sleep(300);
    }

    @Test
    void test3() {
        doComplexOperation(); //Prints 0 - 4
        sleep(1000);
    }

    static void doComplexOperation() {
        new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println(Thread.currentThread().getName() + "-" + i);
                sleep(100);
            }
        }).start();
    }

    static void sleep(int ms) {
        try {
            Thread.sleep(ms);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

0 个答案:

没有答案