首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么JUnit 5套件注解@SelectClasses和@IncludeClassNamePatterns找不到不以“测试”或“测试”结尾的测试?

JUnit 5是Java中一种流行的单元测试框架,提供了一系列注解来帮助开发人员编写和管理测试用例。其中,@SelectClasses和@IncludeClassNamePatterns是两个用于选择测试类的注解。

@SelectClasses注解用于选择指定的测试类,而@IncludeClassNamePatterns注解用于选择符合指定模式的测试类。在默认情况下,JUnit 5会自动扫描并执行以"Test"或"Tests"结尾的测试类。

这种默认行为是为了遵循命名约定,使得开发人员可以更容易地识别出哪些类是测试类。但是,有时候我们可能需要选择一些不遵循命名约定的测试类,这时就可以使用@SelectClasses和@IncludeClassNamePatterns注解来指定。

然而,根据你的问题描述,@SelectClasses和@IncludeClassNamePatterns注解无法找到不以"测试"或"测试"结尾的测试类。这是因为JUnit 5默认的测试类过滤器会排除不符合命名约定的类。

如果你想选择不以"测试"或"测试"结尾的测试类,可以自定义一个测试类过滤器,并在@SelectClasses或@IncludeClassNamePatterns注解中使用该过滤器。你可以实现自己的类过滤器,根据自己的需求来选择测试类。

以下是一个示例的自定义类过滤器的实现:

代码语言:txt
复制
import org.junit.platform.engine.discovery.ClassNameFilter;
import org.junit.platform.engine.discovery.ClassSelector;
import org.junit.platform.engine.discovery.DiscoverySelectors;
import org.junit.platform.engine.discovery.PackageSelector;
import org.junit.platform.engine.discovery.UniqueIdSelector;
import org.junit.platform.engine.discovery.UriSelector;
import org.junit.platform.engine.discovery.UniqueIdSelector.UniqueIdSelectorBuilder;
import org.junit.platform.launcher.LauncherDiscoveryRequest;
import org.junit.platform.launcher.LauncherDiscoveryRequestBuilder;
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
import org.junit.platform.launcher.core.LauncherFactory;
import org.junit.platform.launcher.Launcher;
import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
import org.junit.platform.launcher.listeners.TestExecutionSummary;

import java.util.regex.Pattern;

public class CustomClassNameFilter implements ClassNameFilter {
    private final Pattern pattern;

    public CustomClassNameFilter(String regex) {
        this.pattern = Pattern.compile(regex);
    }

    @Override
    public boolean includeClassName(String className) {
        return pattern.matcher(className).matches();
    }
}

然后,你可以在测试类中使用自定义的类过滤器,如下所示:

代码语言:txt
复制
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.TestExecutionExceptionHandler;
import org.junit.jupiter.api.extension.TestExtensionContext;
import org.junit.jupiter.api.extension.TestTemplateInvocationContext;
import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;

@ExtendWith(CustomClassNameFilter.class)
public class MyCustomTestClass {
    // 测试方法
}

这样,你就可以选择不以"测试"或"测试"结尾的测试类了。

在腾讯云的产品中,与JUnit 5相关的产品和服务可能包括云服务器、云函数、容器服务等。具体的产品选择和介绍可以参考腾讯云官方文档:腾讯云产品介绍

请注意,以上答案仅供参考,具体的选择和实施应根据实际需求和情况进行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券