【问题标题】:How to create custom JUnit5 Extensions如何创建自定义 JUnit5 扩展
【发布时间】:2017-09-13 09:58:56
【问题描述】:

是否可以像在 JUnit4 中创建 @Rule 一样创建自定义扩展?

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());
    }
}

【问题讨论】:

    标签: java unit-testing junit junit5 junit5-extension-model


    【解决方案1】:

    是的。在 Junit5 中可以创建custom extensions。事实上,这正是 @ExtendWith 的用途:

    为特定的所有测试注册一个自定义YourExtension 类及其子类,您可以将测试类注释为 跟随。

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

    BeforeAllCallbackAfterAllCallback 的示例可以在spring-framework. 找到


    多个扩展可以像这样一起注册:

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

    【讨论】:

    • @LazerBanana 链接了答案中的示例。
    • 课堂上可以有多个扩展名吗?
    • @LazerBanana 是的,您可以,只需以列表的形式指定它们以逗号分隔。
    猜你喜欢
    • 2020-09-28
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多