Охват условий на выписке - PullRequest
1 голос
/ 30 января 2020

Когда я запускаю покрытие для моего кода ниже:

  private static String mapMyVal(String val) {
    switch (val) {
      case "foo":
        return "FOO_FOO";
      case "bar":
        return "BARR";
      default:
        throw new InvalidArgumentException();
    }
  }

я вижу "8 из 10 охваченных условий", когда я запускаю свои модульные тесты с этим покрытием. Однако я вижу все три строки, охватываемые в заявлении.

Поскольку нет никаких других условий, кроме "foo", "bar" и всего остального, что это за пропущенные два условия?

Ответы [ 2 ]

3 голосов
/ 30 января 2020

Я вижу один возможный случай, не охваченный. Ввод val может быть null. В этом случае ваш оператор switch выдаст NullPointerException. Чтобы исправить это, вы можете добавить нулевую проверку в начало метода.

private static String mapMyVal(String val) {
    switch (val) {
        case "foo":
            return "FOO_FOO";
        case "bar":
            return "BARR";
        default:
            throw new InvalidArgumentException();
    }
}
1 голос
/ 30 января 2020

Уже был кто-то, кто задавал почти тот же вопрос. В целом оказалось, что 100% тестов на единицу для случая коммутатора может быть чистой удачей из-за способа, которым java обрабатывает корпус коммутатора. См. Здесь Покрытие ветви эклеммы для коммутатора: 7 из 19 пропущено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...