Java 如何创建自定义JUnit5扩展
是否可以像在JUnit4中创建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
@规则那样创建自定义扩展?
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 {