gpt4 book ai didi

java - 是否有任何扩展 JUnit4 测试类的约定?

转载 作者:行者123 更新时间:2023-12-04 05:08:36 26 4
gpt4 key购买 nike

我的测试有很多共同的逻辑,所以我决定通过扩展来分享。我写了两个类:TestNumberOne扩展 TestBase .

测试库

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;

/**
* @author Pavel
* @since 2013-03-03
*/
public class TestBase {

@BeforeClass
public static void beforeClass() {
System.out.println("beforeClass() in TestBase");
System.out.flush();
}

@AfterClass
public static void afterClass() {
System.out.println("afterClass() in TestBase");
System.out.flush();
}

@Before
public void before() {
System.out.println("before() in TestBase");
System.out.flush();
}

@After
public void after() {
System.out.println("after() in TestBase");
System.out.flush();
}
}

TestNumberOne.java
import org.junit.*;

/**
* @author Pavel
* @since 2013-03-03
*/
public class TestNumberOne extends TestBase {

@Test
public void anyTest() {
System.out.println("anyTest() in TestNumberOne");
System.out.flush();
}
}

当我执行测试时,我得到了如此奇怪的输出:
before() in TestBase
anyTest() in TestNumberOne
after() in TestBase
beforeClass() in TestBase
afterClass() in TestBase

为什么它有这么奇怪的顺序?是否有任何扩展 JUnit 测试类的约定?

更新:
  • 测试在 IDEA 中运行
  • 为了得到如此奇怪的结果,我已经运行了几次(其他结果符合预期)
  • 最佳答案

    这绝对是一个 IntelliJ IDEA 问题。
    如果我通过 maven 运行你的代码,它运行正常;如果我在 IntelliJ 中多次运行它,那么有时我会像您一样得到不正确的输出。
    实际上,我找到了一种重现它的方法:

  • 在每个输出消息之后添加 Thread.sleep(1000)。
  • 关闭“运行测试”窗口中的“跟踪运行测试”(运行测试列表上方的蓝色圆圈)
  • 在 IntelliJ 中运行整个 TestNumberOne 测试类(即使您只有一种测试方法)-> 输出应该按正确顺序
  • 单击测试列表中的 anyTest 方法,然后单击 TestNumberOne -> 输出顺序不正确

  • (此外,如果您使用 sleep 运行它,您会看到输出顺序正确,但在测试结束时会重新排序)
    所以它们以正确的顺序运行,只有输出困惑。

    关于java - 是否有任何扩展 JUnit4 测试类的约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15183669/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com