如何从相应的测试资源

时间:2018-02-06 23:03:46

标签: java unit-testing intellij-idea junit

对于每个类,我们都有相应的测试类和测试资源。例如,对于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,但我可以转到父目录并执行,这将执行该目录中的所有类。有没有办法可以通过测试资源在目录中执行单个测试类?

4 个答案:

答案 0 :(得分:3)

有几种方法可以做你想要的,这是一种方式:

你需要告诉IntelliJ你想要运行哪个测试,一种方法是点击" Tests"选项卡切换项目视图以显示测试。您可能更喜欢"包"如果您使用资源,它将显示一个以软件包为中心的视图,将您的测试和测试资源分组到同一个结构中。

The tests tab

然后,找到测试,右键单击并选择"运行"从弹出菜单中。

enter image description here

答案 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)

答案 3 :(得分:0)

IntelliJ run single test method

在IntelliJ中打开测试类后,您应该看到一个绿色圆圈,底部有一个小三角形。它出现在左侧,行编号出现在编辑器上。如果你点击它,你应该只能开始该课程的测试。您还可以在测试类中启动单个测试。