首页
学习
活动
专区
工具
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相关的产品和服务可能包括云服务器、云函数、容器服务等。具体的产品选择和介绍可以参考腾讯云官方文档:腾讯云产品介绍

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

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

相关·内容

JUnit5基础教程

JUnit5是Java的单元测试框架,用于测试Java程序代码。作为一名软件测试工程师,掌握JUnit是非常重要的。我们将从头开始,一步步学习JUnit5的用法。 一、准备工作 1. 在Maven项目中添加JUnit5依赖: <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.7.0</version> <scope>test</scope> </dependency> 2. 创建测试类:使用@Test注解标注测试方法,测试类名通常以Test结尾,如:MathTests。 public class MathTests { @Test void addition() { } } 二、第一条测试用例 我们在addition()方法中使用assertEquals()断言两个值相等: @Test void addition() { assertEquals(2, 1 + 1); } 三、运行测试 右键测试类名,选择“Run 'MathTests'”运行测试类。JUnit将检测@Test注解方法,执行它们,并报告测试结果。 四、JUnit注解 JUnit提供了许多测试相关注解: - @Test:标注测试方法 - @BeforeEach:每个测试方法前执行 - @AfterEach:每个测试方法后执行 - @RepeatedTest:重复测试多次 - @Timeout:测试方法超时时间 - @Disabled:忽略测试方法 - 等等 五、断言 我们可以在测试方法中使用各种断言来验证预期结果: - assertEquals(expected, actual) 两个值相等 - assertTrue(condition) 条件为真 - assertNull(object) 对象为空 - assertThrows(exceptionType, executable) 执行代码抛出异常 - 等等 六、测试套件与测试分组 JUnit支持把多个相关测试组织在一起: - @Suite用于注解测试套件类 - @RunWith(Suite.class)用于启动测试套件 - @Categories用于给测试类或方法添加分类 - 然后可以在套件中包含指定分类的测试 七、参数化测试 使用@ValueSource等注解,可以运行同一测试逻辑针对不同输入。 希望此详细教程能够帮助初级工程师彻底掌握JUnit5的使用。请在学习或使用中遇到任何问题,随时与我讨论。

02
领券