【问题标题】:How to execute an individual JUnit test from its corresponding test resources如何从相应的测试资源执行单个 JUnit 测试
【发布时间】:2018-02-06 23:03:46
【问题描述】:

对于每个类,我们都有对应的测试类和测试资源。例如,对于src/main/java 下的类Example.java,我们在src/test/java 下有测试类TestExample.java,在src/test/resources 下有名为Example 的资源目录。

如果测试资源共享相同的目录结构,我可以直接从测试资源运行所有测试用例。我可以在src/test/resources 下的测试资源目录上执行,IntelliJ 会自动启动src/test/java 下同一目录路径下的所有测试类。我的问题是,我怎样才能让 IntelliJ 只在该测试目录上运行一个测试类而不是所有其他测试类?如果我尝试在特定的类名上执行,它会显示0 test classes found in package,但我可以转到父目录并执行,它将执行该目录中的所有类。有什么方法可以通过测试资源在目录中执行单个测试类?

【问题讨论】:

  • 最好是在 github 上分享您的代码,以便人们可以在本地运行它并尝试为您提供帮助
  • ExampleTest.java 中有实际测试吗?请在您的问题中添加代码
  • 项目结构的屏幕截图也会有所帮助
  • 我不明白你想做什么以及为什么。您可以告诉 IntelliJ 您要运行哪些测试,然后测试将获取它被编程使用的任何资源(例如,使用 getClass().getResourceAsStream())。但是您听起来好像要指向资源?为什么?
  • @flup 方便。我们有几十个测试类,每个测试类对应几十个测试资源。我们已经抽象出测试工具,以便测试人员可以专注于输入和预期的输出。因此,如果测试人员可以直接从测试类以来的测试资源中执行测试,那将很方便。

标签: java unit-testing intellij-idea junit


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    由于您在这个问题上使用了 IntelliJ 标记,我假设您使用 Maven 作为您项目的生命周期框架。 在这种假设下,我建议你使用找到的surefire插件here

    surefire 的许多不错的功能之一是能够对测试进行分组并仅运行特定的测试组(复制自上面链接的内容):

    使用 JUnit 类别 JUnit 4.8 引入了类别的概念。您可以通过使用 groups 参数来使用 JUnit 类别。只要项目中的 JUnit 版本是 4.8 或更高,“groups”参数的存在会自动让 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 注解也可以应用于类级别。

    【讨论】:

    • 哥们,这是我看到这个问题的第一个想法。
    【解决方案3】:
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2015-04-05
      • 2012-08-19
      • 2017-07-05
      • 2011-01-30
      • 2019-04-24
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      相关资源
      最近更新 更多