簡體   English   中英

JUnit 5 - 為整個測試套件提供設置和拆卸

[英]JUnit 5 - Providing setUp and tearDown for an entire Test Suite

我的要求是對一組測試進行一些初始化,並在所有測試完成后將其清除。 這些測試圍繞幾個測試類進行,因為它們不是密切相關的,但需要一個共同的初始化。

我正在使用@SelectClasses來形成套件,並嘗試使用應該處理預處理和后處理的自定義擴展來使用@ExtendWith 這不起作用,我不確定 JUnit 中是否存在合適的解決方案。 共享已經嘗試過的示例代碼。

套房:

@SelectClasses({FirstTest.class, SecondTest.class})
@ExtendWith(SuiteExtension.class)
@RunWith(JUnitPlatform.class)
@SuiteDisplayName("test suite")
public class SuiteClass {
}

延期:

public class SuiteExtension implements BeforeAllCallback, AfterAllCallback {

    @Override
    public void afterAll(ExtensionContext context) throws Exception {
        System.out.println("afterAll");
    }

    @Override
    public void beforeAll(ExtensionContext context) throws Exception {
        System.out.println("beforeAll");
    }
}

測試類 1:

public class FirstTest {

    @Test
    void test1(){
        System.out.println("test1");
    }
}

測試類 2:

public class SecondTest {

    @Test
    void test2(){
        System.out.println("test2");
    }
}

輸出:

test1
test2

預期輸出:

beforeAll
test1
test2
afterAll

不支持結合使用@RunWith (來自 JUnit 4)和@ExtendWith (來自 JUnit Jupiter):它們是來自兩個不同框架的擴展機制。

從技術上講,您的SuiteClass是一個 JUnit 4 測試類。 因此,JUnit Jupiter 不會為其注冊或執行任何擴展。

關於 JUnit 5 中的套件,我們(JUnit 團隊)計划為不需要 JUnit 4 Runner (即@RunWith(JUnitPlatform.class) )的套件提供一流的支持。 有關詳細信息,請參閱所有標有“套件”的 GitHub 問題 隨意觀看和/或評論任何這些問題。

在此期間,我相信在 JUnit Jupiter 中實現“套件前后”支持的最接近的方法是實現一個自定義擴展,該擴展實現了BeforeAllCallbackAfterAllCallback 該擴展需要通過在ExtensionContext Store存儲一個標志(作為BeforeAllCallback )來跟蹤它是否已經被調用,以便它只在“套件”之前執行一次 同樣,它需要計算它執行的類的數量,並在Store跟蹤它。 這將用作StackCountDownLatch 作為AfterAllCallback ,擴展需要遞減全局計數器,並且僅所有測試類完成后才執行

您顯然需要確保為屬於該套件的每個測試類注冊了您的套件擴展。 也許自定義組合注釋可以為您簡化那里的事情。

現在,無可否認,我只是在我的腦海中實現了它,但還沒有真正編碼這樣一個“套件”擴展。 因此,如果您真的實施它,我很想聽聽您的經驗並可能看到您的代碼。 ;-)

干杯,

Sam(JUnit 5 的核心提交者)

暫無
暫無

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

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