只有一个有效的testCase,我可以节省写失败的时间吗? (我可以自动生成它们)

时间:2016-09-09 18:46:36

标签: java junit mockito junit4 assertj

想象一下以下情况:有一个遗留应用程序我想编写测试,以便能够重构(丑陋)代码。

现在有很多代码可以处理一些约束。基本上它归结为这个签名:

public Boolean isValidRequest(Boolean constraint0, Boolean constraint1, Boolean constraint2, BooleanConstraint3) {
    return constraint0 && constraint1 && constraint2 && constraint3;
}

现在我要测试的就是“链接”(这里所有的约束都与“&&”相关联,但我想确保它保持不变,例如没有拼写错误!)

为了测试所有组合,我必须编写n²个测试,其中n是约束的数量。这里将是4²,因此进行了16次测试。 我想知道是否有更简单的方法。唯一有效的测试用例是:

@Test
public void testAllConstraintsFulfilled() {
    assertThat(myObjectToTest.isValidRequest(true, true, true, true)).isTrue();
}

虽然所有其他组合都会失败。我想知道是否有一种方法我不知道要不要手动编写其他15个测试用例,而是说:

1) Try all combinations
2) Only (true, true, true, true) should not fail

我有mockito,assertj和junit4可用。任何提示,想法?

1 个答案:

答案 0 :(得分:1)

这里有两种方式:

A)你转向覆盖;并且你一直在编写测试用例,直到你达到100%。您无需测试所有可能的路径 - 只需要您的程序可以使用的现有路径!

B)你改变了这种方法:而不是将测试用例写入命中路径;您使用生成测试的解决方案。换句话说:您提供规则,并且引擎会验证测试中的代码是否与这些规则匹配。 QuickCheck将是此类工具的一个示例。