簡體   English   中英

@ Before / @ BeforeEach繼承行為更改JUnit4 / JUnit5

[英]@Before/@BeforeEach inheritance behaviour change 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()BaseTestClass調用BaseTestClassInheritsFromBasesetUp()方法。

在將此代碼遷移到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指出的:

遺產

@BeforeEach方法是從超類繼承的,只要它們不被覆蓋即可。

您重寫InheritsFromBase類中包含@BeforeEachsetup()方法。
因此,它不再繼承。

對於JUnit 4, @Before javadoc沒有聲明任何特殊性和繼承能力。
因此,您應將實際行為視為“正常”,但沒有記錄。

為了獲得與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();
    }
}

當我執行測試時,它生成為輸出:

我從基地繼承

基礎測試課

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM