java - 只有一个有效的测试用例,我可以节省编写失败测试用例的时间吗? (我可以自动生成它们吗)

标签 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 可用。有什么提示、想法吗?

最佳答案

这里有两种方法:

A) 您转向报道;然后你继续编写测试用例,直到达到 100%。您不需要测试所有可能路径 - 只需测试您的程序可以采用的现有路径!

B)你扭转了这种方法:而不是编写测试用例来命中路径;您使用为您生成测试的解决方案。换句话说:您提供规则,并且引擎验证被测试的代码是否匹配这些规则。 QuickCheck这就是此类工具的一个例子。

关于java - 只有一个有效的测试用例,我可以节省编写失败测试用例的时间吗? (我可以自动生成它们吗),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39417972/

相关文章:

android - 无法监视 Android 类

java - 有开源的污染工具吗?

java - 在 Java 中多次使用相同的 ResultSet

java - 1L serialVersionUID 是什么意思?我什么时候可以使用这个默认值 1L?

java - 单元测试 HttpURL 连接

java - 如何在 JUnit 测试的方法内模拟方法调用?

android - 在 Android 应用程序中模拟类 - 不在单元测试范围内

java - StaticWriter 和 Writer 类之间的冲突

hibernate - 用户缺少权限或找不到 WITH JUnit 对象

java - 异常Junit 4.10后的Mockito验证