java - 如何在 JUnit 4.x 中创建嵌套的测试套件?

标签 java junit junit4 test-suite

我正在尝试将 JUnit 添加到一个大型项目中,但在嵌套测试套件时遇到了困难。例如:

@RunWith(Suite.class)
@Suite.SuiteClasses({Test2.class, .....})
public class Test1{
}

@RunWith(Suite.class)
@Suite.SuiteClasses({Test3.class, .....})
public class Test2{
  //might have tests
}

@RunWith(Suite.class)
public class Test3{
  //tests here
}

每个类在它自己的包以及所有子包 TestSuites 中运行测试

运行 Test1 导致 java.lang.Exception: No runnable methods。我如何让它工作?有没有更好的方法来组织测试,而无需在某处使用庞大的列表?

最佳答案

第一个问题是Test3使用了@RunWith(Suite.class),但是没有包含@Suite.SuiteClasses({Test3.class, .....}) 。这会产生一个 IntializationError: class 'Test3' must have a SuiteClasses annotation。由于您不打算在 Test3 下面有任何类,因此应删除此注释。

Exception: No runnable methods 的第二个问题几乎总是由于忘记将@Test 添加到测试中。您没有在样本中进行测试,所以我不知道是否确实如此,但这是最有可能的原因。

以下是您的代码的工作版本,允许从任何类运行测试:

Test1.java

import org.junit.runner.*;
import org.junit.runners.*;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({Test2.class})
public class Test1 {

}

Test2.java

import org.junit.runner.*;
import org.junit.runners.*;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({Test3.class})
public class Test2 {

}

Test3.java

import static org.junit.Assert.*;

import org.junit.*;

public class Test3 {

    @Test
    public void testTrue(){
        assertTrue(true);
    }
}

至于是否有比组织事物更好的方法,我想这仅取决于您决定如何创建类。由于您可以将套件添加到套件,正如这所演示的那样,您可以创建更小的套件 block ,这些套件依赖于一切,就像一棵树。例如,我通常做的是:

AllTestSuite
    TextParsingSuite
    GuiSuite
        SwingSuite
        JavaFXSuite
    FileIOSuite

测试被添加到最相关的套件中。最后,我认为我没有任何套件包含超过 10 个测试类/套件。如果我这样做了,是时候制作一个新的子套件了。换句话说,没有“某个地方的巨大列表”,只有很多较小的列表组合在一起成为另一个列表,以便有效地构成一个大列表。

我想你可以使用一些工具来动态地找到所有包含测试的 Java 类,但 JUnit 本身不支持这种行为(它只运行你告诉它的测试,我个人认为这是一件好事) .

关于java - 如何在 JUnit 4.x 中创建嵌套的测试套件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9070483/

相关文章:

java - 在 Java 中如何验证 JUnit 4 异常中的值?

grails - 对访问域对象Grails的属性感到困惑

java - 如何将错误收集器用于带参数的 junit 测试方法

java - 停止不会被中断的线程

java - 无法创建可比较的、可序列化的实现类

java - 是否可以使用 java 删除 gemfire 中的特定数据(键及其特定值)?

java - 在 JUnit 中使用相同测试数据重复多个测试的简洁方法

java - 创建生态系统时出现处理错误

java - assertEqual NullPointerException 的 JUnit 测试

mysql - 如何使用 Spring boot 从 select 查询中获取结果