簡體   English   中英

JUnit 方法的執行順序令人困惑

[英]Confusing execution order of JUnit methods

我通過擴展Suite創建了一個自定義運行器:

public class MyRunner extends Suite {

    public MyRunner(Class<?> klass, RunnerBuilder builder) throws InitializationError {
        super(klass, builder);
    }

    @Override
    public void run(RunNotifier notifier) {
        notifier.addListener(new MyRunListener());
        notifier.fireTestRunStarted(getDescription());
        super.run(notifier);
    }
}

正如在run中看到的那樣,它注冊了一個MyRunListener ,如下所示:

class MyRunListener extends RunListener {
    @Override
    public void testRunStarted(Description description) {
        System.err.println("1: run started");
    }

    @Override
    public void testStarted(Description description) {
        System.err.println("2: test started");
    }

    @Override
    public void testFinished(Description description) {
        System.err.println("3: test finished");
    }

    @Override
    public void testRunFinished(Result result) {
        System.err.println("4: run finished");
    }
}

根據我希望調用這些方法的順序,我添加了1:2:3:4:

然后我創建了一個如下所示的測試套件:

@RunWith(MyRunner.class)
@Suite.SuiteClasses({ MyTest.class })
public class MyTestSuite {
}

以及以下測試:

public class MyTest {
    @BeforeClass
    public static void beforeClass() {
        System.err.println("A: beforeClass");
    }

    @Before
    public void before() {
        System.err.println("B: before");
    }

    @Test
    public void test() {
        System.err.println("C: Running actual test...");
    }

    @After
    public void after() {
        System.err.println("D: after");
    }

    @AfterClass
    public static void afterClass() {
        System.err.println("E: afterClass");
    }
}

同樣,output 按照我期望的順序標記。

這是我通過 IntelliJ 運行MyTestSuite時得到的 output(作為 JUnit 運行配置):

2: test started

B: before
C: Running actual test...
D: after

3: test finished
E: afterClass

4: run finished
1: run started
A: beforeClass

為什么我會收到 output 訂單? 我的跑步者一定做錯了什么,但我剛剛根據 web 上的教程實現了它。 (使用 JUnit 4.12)

正如@DmitryB 在評論中所建議的那樣,它似乎是某種形式的 output 緩沖。 測試完成后,output 的各個部分以一種奇怪的方式縫合在一起。

我在每次打印輸出后添加了Thread.sleep(1000) ,這就是我在 IntelliJ 中運行它時的樣子:

目前的解決方法是使用 gradle 任務運行配置而不是 JUnit 之一。

在 Jetbrains 提交了這張票

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM