Как получить больше (всех) угловых случаев при генерации тестов Evosuite? - PullRequest
0 голосов
/ 16 апреля 2019

Мой пример целевого кода для покрытия тестами выглядит следующим образом:

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 == 1 и b == 5, чтобы раскрыть все возможные ArithmeticException случаи. Но только эта опция раскрывает только 1 ArithmeticException кейс:

  @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, который не подходит для моего случая)

...