gpt4 book ai didi

java - junit 构造函数在测试方法之后运行

转载 作者:行者123 更新时间:2023-11-29 04:38:03 26 4
gpt4 key购买 nike

AFAIK 在任何方法之前,构造函数方法由 JRE 运行。但就我而言,构造函数在测试方法之后运行。

import org.junit.*;
public class CourseTest {

public CourseTest(){
System.out.println("Constructor");
}

@BeforeClass
public static void beforeClassTest() throws Exception{
System.out.println("beforeClassTest");
}

@AfterClass
public static void afterClassTest() throws Exception{
System.out.println("afterClassTest");
}

@Before
public void beforeTest() throws Exception{
System.out.println("beforeTest");
}

@After
public void afterTest() throws Exception{
System.out.println("afterTest");
}


@Test
public void getCredit() throws Exception {
System.out.println("test 1 is getCredit");

}

@Test
public void getName() throws Exception {
System.out.println("test 2 is getName");
}
}

结果是:

beforeTest
test 2 is getName
afterTest
beforeTest
test 1 is getCredit
afterTest
beforeClassTest
Constructor
Constructor
afterClassTest

不仅如此,我的测试用例也以相反的顺序运行。对此很困惑。我理解为什么构造函数运行两次,因为对于每个测试,都会实例化一个新类。但是构造函数为什么在测试方法之后运行?

编辑:正如@mike-jenkins 所建议的,我调试了测试类,它按以下顺序运行:

1-beforeClassTest
2-Constructor
3-beforeTest
4-test 2 is getName
5-afterTest
6-Constructor
7-beforeTest
8-test 1 is getCredit
9-afterTest
10-afterClassTest

最佳答案

JUnit 测试的执行顺序无法保证,因为 JUnit 框架管理(内部)并行运行测试。这是为了加快测试执行速度,这在您在 CI(持续集成)环境中构建应用程序时尤其有用,因为整个应用程序必须运行数千个测试。

如果你想控制执行的顺序,你可以使用@FixMethodOrder注解如下:

 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTest {
//your test code here
}

The default order of execution of JUnit tests within a class is deterministic but not predictable. The order of execution is not guaranteed for Java 7 (and some previous versions), and can even change from run to run, so the order of execution was changed to be deterministic (in JUnit 4.11)

可以看看here

由于有多个测试用例,构造函数会被调用多次(由JUnit框架创建的不同线程并行执行)。

由于多个线程正在运行,因此无法保证构造函数的 System.out.prinln()(实际上是任何日志)总是先打印(即使它已先被调用)。 总而言之,在多线程环境中,您无法预测日志和 System.out.println() 语句的顺序。

关于java - junit 构造函数在测试方法之后运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40411188/

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