java - 如何创建自定义 JUnit5 扩展

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

是否可以像我在 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());
    }
}

最佳答案

。可以创建 custom extensions在 Junit5。事实上这就是 @ExtendWith 用于:

To register a custom YourExtension for all tests in a particular class and its subclasses, you would annotate the test class as follows.

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

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


Multiple extensions can be registered together like this:

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

关于java - 如何创建自定义 JUnit5 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194482/

相关文章:

java - 如何编写 JUnit 测试用例来测试线程和事件

java - Spring:REST 异常被捕获为 403 Forbidden 异常

Java 平等不起作用?

java - 我自己很难弄清楚当前线程在这段代码中是如何工作的

C# WebApi 单元测试和模拟 Controller

javascript - 当发生未捕获的 Promise 拒绝时,我如何在 Jest 中通过测试失败?

java - 如何在不退出应用程序的情况下根据 JPanel 上的事件关闭特定的 JFrame?

c# - DonorManagementTests 没有默认构造函数 (nunit/moq)

android - 使用 Mockito 模拟 PreferenceManager

java - 如何在 @Configuration/@Bean 使用的单元测试中禁用 Spring Autowiring