Junit5如何识别@Test测试用例
Junit5在进行测试用例发现核心解析代码如下,RequestResolver注册了三个selectorResolver,
- addClassContainerSelectorResolver:这个是junit-platform暴露的方法,用于搜索选择模块下所有的类,类的过滤规则是new IsTestClassWithTests(),意思是筛选出所有带有@Test标示的类;
- ClassSelectorResolver:在步骤一发现所有类中按照名称进行过滤;
- MethodSelectorResolver:在所选类中对方法进行过滤; 这样最后筛选出的方法是带有@Test标示的方法。
@API(status = INTERNAL, since = "5.0")
public class DiscoverySelectorResolver {
// @formatter:off
private static final EngineDiscoveryRequestResolver<JupiterEngineDescriptor> resolver = EngineDiscoveryRequestResolver.<JupiterEngineDescriptor>builder()
.addClassContainerSelectorResolver(new IsTestClassWithTests())
.addSelectorResolver(context -> new ClassSelectorResolver(context.getClassNameFilter(), context.getEngineDescriptor().getConfiguration()))
.addSelectorResolver(context -> new MethodSelectorResolver(context.getEngineDescriptor().getConfiguration()))
.addTestDescriptorVisitor(context -> new MethodOrderingVisitor(context.getEngineDescriptor().getConfiguration()))
.addTestDescriptorVisitor(context -> TestDescriptor::prune)
.build();
// @formatter:on
public void resolveSelectors(EngineDiscoveryRequest request, JupiterEngineDescriptor engineDescriptor) {
resolver.resolve(request, engineDescriptor);
}
}
上一篇:
IDEA上Java项目控制台中文乱码
