Junit5如何识别@Test测试用例

Junit5在进行测试用例发现核心解析代码如下,RequestResolver注册了三个selectorResolver,

  1. addClassContainerSelectorResolver:这个是junit-platform暴露的方法,用于搜索选择模块下所有的类,类的过滤规则是new IsTestClassWithTests(),意思是筛选出所有带有@Test标示的类;
  2. ClassSelectorResolver:在步骤一发现所有类中按照名称进行过滤;
  3. 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);
	}

}
经验分享 程序员 微信小程序 职场和发展