2017-09-13 160 views
2

是否可以創建自定義擴展,就像我可以在JUnit4中創建@Rule一樣?如何創建自定義JUnit5擴展

public class MockMetadataServiceRule extends ExternalResource { 
    @Override 
    protected void before() throws Throwable { 
     //some setup 
    } 

    @Override 
    protected void after() { 
     // some teardown 
    } 
} 

然後,我可以用測試類裏面有JUnit5

@BeforeAll 
public static void init() { 
    MetadataServiceFactory.setService(MockitoMockMetadataService.getMock()); 
} 

@AfterAll 
public static void teardown() { 
    MetadataServiceFactory.setService(null); 
} 

做到這一點,但我相信你可以@ExtendWith(MyExtension.class)現在?

編輯: 我的擴展案例@nullpointer鏈接消失了。謝謝。

public class MockMetadataServiceExtension implements BeforeAllCallback, AfterAllCallback { 

    @Override 
    public void afterAll(ExtensionContext extensionContext) throws Exception { 
     MetadataServiceFactory.setService(null); 
    } 

    @Override 
    public void beforeAll(ExtensionContext extensionContext) throws Exception { 
     MetadataServiceFactory.setService(MockitoMockMetadataService.getMock()); 
    } 
} 

回答

2

。可以在Junit5中創建custom extensions。其實這就是@ExtendWith適用於:

要在特定 類及其子類註冊自定義YourExtension所有測試,你會註釋測試類爲 如下。

@ExtendWith(YourExtension.class) 
class YourTests { 
    // ... 
} 

FO的BeforeAllCallback一個例子,AfterAllCallback可以在spring-framework.


多個擴展可以一起登記這樣找到:

@ExtendWith({ YourExtension1.class, YourExtension2.class }) 
class YourTests { 
+1

@LazerBanana在答案中鏈接了示例。 – nullpointer

+1

我可以在課堂上有多個擴展名嗎? – LazerBanana

+1

@LazerBanana是的,你可以,只需指定它們以逗號分隔列表的形式。 – nullpointer