当前位置: 首页 > 知识库问答 >
问题:

JUnit参数化套件中首先运行的所有测试的方法,而不是在每个测试之前

滕鸿畴
2023-03-14

基本的问题是,当我将JUnit测试分组为套件或套件组时,所有测试的< code>@Parameters方法在单独的套件或测试执行之前首先运行。我们的设置如下:

我们有多个测试类文件,每个文件都有包含实际测试的静态内部类。

@RunWith(Suite.class)
@SuiteClasses({
   SubTestSuite01.TestSet01.class,
   SubTestSuite01.TestSet02.class})
public class SubTestSuite01 {
  public static class TestSet01{
    public TestSet01(){}
    @Parameters public static Collection<Object[]> data(){}
    @Test public void test01(){}
    @Test public void test02(){}
  }

  public static class TestSet02{
    public TestSet02(){}
    @Parameters public static Collection<Object[]> data(){}
    @Test public void test01(){}
    @Test public void test02(){}
  }
} 

以此类推,SubTestSuite02SubTestSuite03等。现在,为了将所有这些测试套件收集到一个更大的集合中,我创建了一个更大型的测试套件,如下所示:

@RunWith(Suite.class)
@SuiteClasses({SubTestSuite01.class, SubTestSuite02.class,SubTestSuite03.class})
public class AllTests{}

但是,无论我是运行AllTest主套件,还是SubTestSuite,所有内部类的@Parameters方法都在所有@BeforeClass方法或实际测试方法之前首先在整个套件/套件中调用。

我的问题是:

>

  • 这是预期的行为吗?

    我如何让它运行,以便单个内部类的@Parameters方法在它自己的测试执行之前运行,而不是在套件开始时一起运行?

    使用当前的行为,我冒着快速占用系统资源的风险,因为各种东西都被加载在一起。

  • 共有1个答案

    冯星剑
    2023-03-14

    @参数化始终首先运行,甚至在@BeforeClass之前

    您不必在测试中使用静态类和内部类,我会使用类来保存类似的测试,并@Cetegories来选择组

     类似资料:
    • 我正在使用 JUnit 测试套件来运行一些测试,其中一个测试使用@Parameterized多次运行。我发现当我运行测试时,@Parameterized函数在@BeforeClass之前运行。这是预期的行为还是发生了其他事情?我本来以为@BeforeClass会在任何测试开始之前运行。 这是我的测试套件: 测试1使用@Parameterized: 如何解决此问题以在运行其他任何内容之前运行@Bef

    • 参数化测试可以将不同的数据输入到测试中。不过,我创建了一个示例计算器,希望为其创建参数化测试。但是,我发现您只能为单个测试创建一组参数化数据。 我已经创建了参数化测试,用于添加两个数字,得到预期的结果。由于预期结果会有所不同,因此该数据将不适用于减法运算。 有没有可能为每个加、减、乘、除测试提供参数化数据? 非常感谢您的建议,

    • 问题 我有一堆jUnit测试(许多具有自定义运行器,例如PowerMockRunner或JUnitParamsRunner)都在一些根包下(它们在的不同深度的不同子包中)。 我想收集包<code>tests<code>下的所有测试,并在不同的JVM中并行运行每个测试类。理想情况下,并行化是可配置的,但默认的number_of_cores也完全可以。请注意,我不想在自己的JVM中运行每个方法,而是要

    • 我一直在设置一些合约JUnit 4测试(遵循回答这个问题的建议) - 例如,如果我有一个接口(我已经在示例中包含了泛型,因为我在我的项目中使用它们) - 但是,这是一个大大简化的示例: 我可以创建一个抽象的合同测试,例如: ...并为每个实现扩展此抽象测试类(我使用。我还将一些变量传递给抽象测试类,以测试接口的实现。 然而,实际上,一些接口返回的对象是其他接口的实现,我希望能够使用该接口的抽象契约

    • 方法和测试位于一个类中,例如 下面是我的testng.xml的示例,其中包含了包含功能测试的包 UPD.post修改后的代码中包含AfterTest。我只使用before/aftermethod注释

    • 我想在JUnit中创建用于测试运行的自定义html报告。我有一个问题是释放资源和关闭标记后,所有的测试都完成了。 我保留了一个打开的文件,以便编写报告。因为每个测试都应该是表和行,而且有数百个,所以我不想为每个测试打开和关闭通道。这里出现的问题是测试组织--我有嵌套的套件,所以testRunFinished不是一个选项(指单个套件,不是所有测试,我看到了这个问题)。TestWatcher也不会帮助