JUnit5测试类属性在每次测试前都为空

z9ju0rcb  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(390)

这个问题在这里已经有答案了

junit是否在每次调用测试方法时重新初始化类(6个答案)
21天前关门了。
我有一个带有非静态字符串属性的JUnit5测试类( value ).
test类有2个测试方法,它们是按定义的顺序执行的(因为问题顺序无关紧要)。
第一个执行的测试方法将string属性设置为“test”。
但是当执行第二个测试方法时,string属性是 null 而不是“测试”。
为什么在JUnit5中是这样的?
除了使string属性为静态之外,我还可以用另一种方法处理这个问题吗?
下面是一些示例代码:

@TestMethodOrder(OrderAnnotation.class)
class Junit5Test {
  private String value;

  @Test
  @Order(1)
  void setValueTest() {
    this.value = "Test";
    assertNotNull(this.value);
  }

  @Test
  @Order(2)
  void readValueTest() {
    // This test fails, because value is null. Why?
    assertNotNull(this.value);
  } 
}
6bc51xsx

6bc51xsx1#

对于每个测试方法,都会创建一个测试类的新示例,因此在调用之间不会保留状态的更改,这与测试方法的顺序无关。
请参阅junit是否在每次调用测试方法时重新初始化类?
至于“以另一种方式处理此事”,我建议不要这样做。单元测试应该是独立的。
测试不应该相互依赖。一次测试不应为下一次测试设置条件。您应该能够独立地运行每个测试,并以您喜欢的任何顺序运行测试。当测试相互依赖时,第一个失败的测试会导致一连串的下游故障,使得诊断变得困难并隐藏下游缺陷。
罗伯特c。martinclean代码:敏捷软件工艺手册,第9章。

相关问题