3

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

1 回答 1

3

的。可以在 Junit5中创建自定义扩展。事实上,这@ExtendWith是为了:

YourExtension要为特定类及其子类中的所有测试注册自定义,您将按如下方式注释测试类。

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

的示例可以在spring-frameworkBeforeAllCallback中找到。AfterAllCallback


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

@ExtendWith({ YourExtension1.class, YourExtension2.class })
class YourTests {
于 2017-09-13T10:49:32.270 回答