从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()
,则会调用setUp()
和BaseTestClass
的{{1}}方法。
将此代码迁移到JUnit5后,不再调用InheritsFromBase
方法。我必须在setUp()
上手动添加@BeforeEach
注释。
导致以下类:
InheritsFromBase
所以我的问题:JUnit4中的行为是正确还是JUnit5?
答案 0 :(得分:3)
JUnit 5的实际行为应该是@BeforeEach javadoc状态:
<强>继承强>
@BeforeEach
方法只要是超类就从超类继承而来 没有被覆盖。
您覆盖setup()
班级中包含@BeforeEach
的{{1}}方法
所以它不再继承。
对于JUnit 4,@Before
javadoc并未说明任何特殊性和继承能力。
所以你应该把实际行为视为&#34; normal&#34;但没有记录。
要使用JUnit 5获得相同的行为,您应该反过来使用JUni4:在超类中删除InheritsFromBase
并仅在子类中添加它。
@BeforeEach
当我执行测试时,它产生输出:
我从基地继承
基础测试类