Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从相应的测试资源执行单个JUnit测试_Java_Unit Testing_Intellij Idea_Junit - Fatal编程技术网

Java 如何从相应的测试资源执行单个JUnit测试

Java 如何从相应的测试资源执行单个JUnit测试,java,unit-testing,intellij-idea,junit,Java,Unit Testing,Intellij Idea,Junit,对于每个类,我们都有相应的测试类和测试资源。例如,对于src/main/java下的classexample.java,我们在src/test/java下有test classTestExample.java,在src/test/resources下有名为example的资源目录 我可以直接从测试资源运行所有测试用例,如果它们共享相同的目录结构。我可以在src/test/resources下的测试资源目录下执行,IntelliJ将自动启动src/test/java下相同目录路径下的所有测试类。我

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


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

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

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

使用JUnit类别 JUnit4.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>

@Category注释也可以应用于类级别。

检查您的测试目录是否标记为“测试根目录”


请参见

可能有几种方法可以满足您的需求,这是一种方法:

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

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


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

最好是在github上共享代码,这样人们就可以在本地运行代码,并尝试向您提供帮助ExampleTest.java中有实际的测试吗?请在你的问题中添加代码。你的项目结构截图也会有帮助。我不明白你想做什么以及为什么。您可以告诉IntelliJ要运行哪些测试,然后测试将获取编程使用的任何资源(例如,使用
getClass().getResourceAsStream()
)。但你听起来好像想把矛头指向资源?为什么?@flup便利。我们有几十个测试类,每个测试类对应几十个测试资源。我们已经抽象出测试工具,以便测试人员能够关注输入和预期输出。因此,如果测试人员可以直接从测试资源中执行测试,那将是很方便的,因为测试类是我看到这个问题时的第一个想法。
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");
  }
}