使用JUnit的@Parameterized时,我可以让一些测试仍然只运行一次吗?

2022-08-31 17:28:02

在许多情况下,我使用对许多排列运行测试。这工作得很好,并保持测试代码本身简单干净。@Parameterized

但是,有时我希望某些测试方法仍然只运行一次,因为它们不使用参数,有没有办法使用JUnit将测试方法标记为“单例”或“运行一次”?

注意:这与在Eclipse中运行单个测试无关,我知道如何做到这一点:)


答案 1

您可以使用封闭的运行器构建测试。

@RunWith(Enclosed.class)
public class TestClass {

    @RunWith(Parameterized.class)
    public static class TheParameterizedPart {

        @Parameters
        public static Object[][] data() {
            ...
        }

        @Test
        public void someTest() {
            ...
        }

        @Test
        public void anotherTest() {
            ...
        }
    }

    public static class NotParameterizedPart {
        @Test
        public void someTest() {
            ...
        }
    }
}

答案 2

您可以将任意数量的测试类关联到一起运行,以使用套件一起运行。这样,在测试类时将运行所有测试,并且可以混合不同的测试运行程序。

  1. 创建与要测试的类关联的测试套件
  2. 添加对参数化测试类的引用
  3. 添加包含非参数化测试的其他类。

    import org.junit.runners.Suite;
    import org.junit.runner.RunWith;
    
    @RunWith(Suite.class)
    @Suite.SuiteClasses({ParameterizedTestClass.class, UnitTests.class, MoreUnitTests.class})
    public class SutTestSuite{
         //Empty...
    }
    

推荐