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

时间:2018-02-19 11:02:55

标签: java junit4 junit5

从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?

1 个答案:

答案 0 :(得分:3)

JUnit 5的实际行为应该是@BeforeEach javadoc状态:

  

<强>继承

     

@BeforeEach方法只要是超类就从超类继承而来   没有被覆盖。

您覆盖setup()班级中包含@BeforeEach的{​​{1}}方法  所以它不再继承。

对于JUnit 4,@Before javadoc并未说明任何特殊性和继承能力。
所以你应该把实际行为视为&#34; normal&#34;但没有记录。

要使用JUnit 5获得相同的行为,您应该反过来使用JUni4:在超类中删除InheritsFromBase并仅在子类中添加它。

@BeforeEach

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

  

我从基地继承

     

基础测试类