对于每个类,我们都有相应的测试类和测试资源。例如,对于Example.java
下的课程src/main/java
,我们在TestExample.java
下面有一个测试类src/test/java
,在Example
下面有一个名为src/test/resources
的资源目录。
如果它们共享相同的目录结构,我可以直接从测试资源运行所有测试用例。我可以在src/test/resources
下的测试资源目录上执行,IntelliJ将在src/test/java
下的同一目录路径下自动启动所有测试类。我的问题是,我怎么能让IntelliJ只在该测试目录上运行一个测试类而不是所有其他测试类?如果我尝试执行特定的类名,它会显示0 test classes found in package
,但我可以转到父目录并执行,这将执行该目录中的所有类。有没有办法可以通过测试资源在目录中执行单个测试类?
答案 0 :(得分:3)
有几种方法可以做你想要的,这是一种方式:
你需要告诉IntelliJ你想要运行哪个测试,一种方法是点击" Tests"选项卡切换项目视图以显示测试。您可能更喜欢"包"如果您使用资源,它将显示一个以软件包为中心的视图,将您的测试和测试资源分组到同一个结构中。
然后,找到测试,右键单击并选择"运行"从弹出菜单中。
答案 1 :(得分:1)
由于您在此问题上使用了IntelliJ标记,因此我假设您使用Maven作为项目的生命周期框架。 在此假设下,我建议您使用找到的here
的surefire插件surefire的许多优秀功能之一是能够对测试进行分组并仅运行特定的测试组(从上面的链接内容复制):
使用JUnit类别 JUnit 4.8引入了类别的概念。您可以使用groups参数来使用JUnit类别。只要项目中的JUnit版本为4.8或更高版本,就会出现"组"参数将自动使Surefire选择支持组的junit47提供程序。
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<configuration>
<groups>com.mycompany.SlowTests</groups>
</configuration>
</plugin>
</plugins>
如果类/接口SlowerTests是SlowTests的子类,这将仅执行使用@Category(com.mycompany.SlowTests.class)注释注释的那些测试以及使用@Category(com.mycompany.SlowerTests.class)注释的那些测试:
public interface SlowTests{}
public interface SlowerTests extends SlowTests{}
public class AppTest {
@Test
@Category(com.mycompany.SlowTests.class)
public void testSlow() {
System.out.println("slow");
}
@Test
@Category(com.mycompany.SlowerTests.class)
public void testSlower() {
System.out.println("slower");
}
@Test
@Category(com.cmycompany.FastTests.class)
public void testSlow() {
System.out.println("fast");
}
}
@Category注释也可以在班级应用。
答案 2 :(得分:0)
检查您的测试目录是否标记为“test root”,
答案 3 :(得分:0)