Java 如何创建自定义JUnit5扩展

Java 如何创建自定义JUnit5扩展,java,unit-testing,junit,junit5,junit5-extension-model,Java,Unit Testing,Junit,Junit5,Junit5 Extension Model,是否可以像在JUnit4中创建@规则那样创建自定义扩展? public class MockMetadataServiceRule extends ExternalResource { @Override protected void before() throws Throwable { //some setup } @Override protected void after() { // some teardow

是否可以像在JUnit4中创建
@规则那样创建自定义扩展?

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

。可以在Junit5中创建。事实上,这正是的目的:

为特定测试中的所有测试注册自定义扩展名 类及其子类,您可以将测试类注释为 接着


有关
事前回调
事后回调
的示例,请访问


多个扩展可以一起注册,如下所示:


@LazerBanana在答案中链接了示例。我可以在类上有多个扩展吗?@LazerBanana是的,您可以,只需以列表的形式指定它们,以逗号分隔即可。
@ExtendWith(YourExtension.class)
class YourTests {
    // ...
}
@ExtendWith({ YourExtension1.class, YourExtension2.class })
class YourTests {