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

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()两者的方法,BaseTestClassInheritsFromBase被调用。

将这段代码迁移到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中的行为正确?

dav*_*xxx 7

预期JUnit 5的实际行为是@BeforeEach javadoc 指出的:

遗产

@BeforeEach 只要不重写方法,方法就从超类继承。

您重写setup() 包含@BeforeEachInheritsFromBase类中的方法。
因此,它不再继承。

对于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)

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

我从基地继承

基础测试课