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项目控制台中文乱码