gpt4 book ai didi

java - @Before/@BeforeEach继承行为改变JUnit4/JUnit5

转载 作者:行者123 更新时间:2023-12-03 00:25:01 26 4
gpt4 key购买 nike

从 JUnit4 迁移到 JUnit5 时,我发现 JUnit4 和 JUnit5 的行为发生了变化,并想检查该变化是否是 JUnit4 或 JUnit5 中的错误以及如何正确执行。

让我们假设以下结构:

一个基类

public class BaseTestClass {

@Before
public void setUp(){
System.out.println("Base Test Class");
}
}

从该基类继承的另一个类

public class InheritsFromBase extends BaseTestClass {

@Override
public void setUp() {
System.out.println("I inherit from base");

super.setUp();
}
}

以及一个实际的测试类

public class ActualTests extends InheritsFromBase {

@Test
public void myTest(){
Assert.assertTrue(true);
}
}

如果我在 JUnit 4 中运行 myTest(),则 BaseTestClassInheritsFromBasesetUp() 方法code> 被调用。

将此代码迁移到 JUnit5 后,不再调用 setUp() 方法。我必须在 InheritsFromBase 上手动添加 @BeforeEach 注释。

产生以下类:

public class BaseTestClass {

@BeforeEach
public void setUp(){
System.out.println("Base Test Class");
}
}

public class InheritsFromBase extends BaseTestClass {

@Override
@BeforeEach
public void setUp() {
System.out.println("I inherit from base");

super.setUp();
}
}

public class ActualTests extends InheritsFromBase {

@Test
public void myTest(){
Assertions.assertTrue(true);
}
}

所以我的问题是:JUnit4 中的行为正确还是 JUnit5 中的行为正确?

最佳答案

JUnit 5 的实际行为预计为 @BeforeEach javadoc状态:

Inheritance

@BeforeEach methods are inherited from superclasses as long as they are not overridden.

您重写 InheritsFromBase 类中包含 @BeforeEachsetup() 方法。
所以它不再被继承。

对于 JUnit 4,@Before javadoc没有说明任何特殊性和继承能力。
因此,您应该将实际行为视为“正常”但没有记录。

要在 JUnit 5 中获得相同的行为,您应该执行与 JUni4 相同的操作:删除父类(super class)中的 @BeforeEach 并仅将其添加到子类中。

public class BaseTestClass {

public void setUp() {
System.out.println("Base Test Class");
}
}


public class InheritsFromBase extends BaseTestClass {

@Override
@BeforeEach
public void setUp() {
System.out.println("I inherit from base");
super.setUp();
}
}

当我执行测试时,它会生成输出:

I inherit from base

Base Test Class

关于java - @Before/@BeforeEach继承行为改变JUnit4/JUnit5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48864716/

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