Chr*_*phE 1 java junit4 junit5
从JUnit4迁移到JUnit5时,我发现JUnit4和JUnit5的行为发生了变化,并想检查该变化是否是JUnit4或JUnit5中的错误,以及如何正确执行。
让我们假设以下结构:
一个基层
public class BaseTestClass {
@Before
public void setUp(){
System.out.println("Base Test Class");
}
}
Run Code Online (Sandbox Code Playgroud)
从该基类继承的另一个类
public class InheritsFromBase extends BaseTestClass {
@Override
public void setUp() {
System.out.println("I inherit from base");
super.setUp();
}
}
Run Code Online (Sandbox Code Playgroud)
和一个实际的测试班
public class ActualTests extends InheritsFromBase {
@Test
public void myTest(){
Assert.assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行myTest()JUnit 4中,则setUp()两者的方法,BaseTestClass和InheritsFromBase被调用。
将这段代码迁移到JUnit5之后,setUp()不再调用这些方法。我必须在上手动添加@BeforeEach注释InheritsFromBase。
产生以下类别:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:JUnit4中的行为正确还是JUnit5中的行为正确?
预期JUnit 5的实际行为是@BeforeEach javadoc 指出的:
遗产
@BeforeEach只要不重写方法,方法就从超类继承。
您重写setup() 包含@BeforeEach在InheritsFromBase类中的方法。
因此,它不再继承。
对于JUnit 4,@Beforejavadoc不声明任何特殊性和继承能力。
因此,您应将实际行为视为“正常”,但没有记录。
为了获得与JUnit 5相同的行为,您应该执行与JUni4相反的操作:@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();
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行测试时,它生成为输出:
我从基地继承
基础测试课
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |