JUnit4空参数化测试

时间:2017-06-09 08:52:52

标签: java junit junit4 parameterized

我已经构建了一个xquery Testframework,有时我想测试标题和入站,有时候只是标题。

因此我有4个测试用例:

headerAndBody, 
headerAndBodyTestsuite,
Header,
HeaderTestsuite

我在目录中搜索数据并从中构建测试程序。

这是错误:

@Test
    public void someTest() throws Exception{
            if (listHdrInbPayTestSuites.size() > 0) {
                assertTrue(buildTest.testHdrInbPay(testSuiteIdentifier));

            }
        }

列表是 EMPTY!但是JUnit仍然说测试运行了两次。如何解决这个问题呢?这是一个空洞的测试?

编辑:

@Parameter
public String testSuiteIdentifier; (which actually has 2 items)

编辑:(一个Testsuite可以包含多个测试用例,因此我不能只使用另一个参数,因为我想通过Testsuite名称来识别它们。) One Testsuite can contain several testcases, so I can't just take another parameter, because I want to identify them by Testsuite name.

临时解决方案: 找到一种解决方法来忽略这些测试:

@Before
    public void shouldRunTest() {
        Assume.assumeTrue(listHeaderAndBodyTestSuites.size() > 0);
    }

我对此解决方案并不满意,因为“跳过测试”的信息可能会产生误导。

任何其他方法/想法?

1 个答案:

答案 0 :(得分:0)

JUnit不支持空测试的概念。被忽略的测试是最接近它的概念。

为了不增加测试计数,您必须确保数据值不是参数的一部分。这意味着您必须在@Parameters方法中删除它们。下面是一个示例,它删除了Parameterized跑步者文档的Fibonacci测试示例的一些数据值。

@Parameters
public static Iterable<Object[]> data() {
    Collection<Object[]> currentData = Arrays.asList(
        new Object[][] {
            { 0, 0 },
            { 1, 1 },
            { 2, 1 },
            { 3, 2 },
            { 4, 3 },
            { 5, 5 },
            { 6, 8 }
        }
    );
    return currentData.stream()
        .filter( dataSet -> dataSet[1] > 3 )
        .collect( Collectors.toList() );
 }