首页 > 解决方案 > 如何在 Evosuite 测试生成时获得更多(所有)极端案例?

问题描述

我要通过测试覆盖的示例目标代码如下所示:

public class Calculator {
  public int div(final int a, final int b) {
    if (b > 3) {
        return a/(b-5);
    } else {
        return a/(b-1);
    }
  }
}

我期待带有参数的测试,b == 1b == 5生成以发现所有可能的ArithmeticException情况。但是仅ArithmeticException提供了仅发现 1 个案例的此选项:

  @Test(timeout = 4000)
  public void test3()  throws Throwable  {
      Calculator calculator0 = new Calculator();
      // Undeclared exception!
      try { 
        calculator0.div(2232, 1);
        fail("Expecting exception: ArithmeticException");

      } catch(ArithmeticException e) {
         //
         // / by zero
         //
         verifyException("hello.Calculator", e);
      }
  }

(其他生成的测试是div(0, 3); div(-5, 0); div(5, 0); div(-635, 3661);:)

我已经为 mvn 尝试了这些运行选项,但没有任何帮助:-Dsearch_budget=600 -DtimeInMinutesPerClass=15 -Dminimize=false -Dassertion_strategy=all

有没有办法捕捉所有“棘手”的测试用例?

已经有类似的问题: Evosuite 只生成几个测试用例(没有答案) EvoSuite - 获取大多数代码覆盖率的参数(建议使用-Dsearch_budget不适用于我的案例的参数)

标签: javaevosuite

解决方案


推荐阅读