Покрытие кода для блока, который имеет броски - PullRequest
0 голосов
/ 12 марта 2012

У меня есть следующий фрагмент

public void setTarget(String target) throws TargetException{
   if(target = null){
      throw new TargetException();
   }
   this.target = target;
}

public void getTarget(){
   return this.target;
}

Я тестирую фрагмент кода выше

@Test(expected = TargetException.class)
public void testTargetSetting() throws TargetException{
   //For coverage of code in if loop
   String target = null;
   MyBean.setTarget(target);
   //For coverage of code in else loop
   target="abc";
   MyBean.setTarget(target);
}

Теперь проблема с вышеприведенным кодом состоит в том, что покрытие кода для тестируемого класса показывает 100%, что является методом setTarget. Он идет в блоках if и else. Но охват метода тестового класса, т.е. testTargetSetting, не охватывается. Всегда отображается красным.

Я использую Эмму для покрытия кода. Любая идея, как можно удовлетворить покрытие кода для фактического метода класса и метода тестового класса.

Примечание: приведенный выше код приведен только для иллюстрации.

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Чтобы получить покрытие для тестового класса, вам необходимо написать тестовый класс для вашего тестового класса.Чтобы иметь покрытие для этого класса, вам нужно написать тестовый класс для тестового класса для вашего тестового класса.

Проще говоря, такие инструменты, как Эмма, не предназначены для отображения покрытия в ваших тестовых классах.Они используют ваши тестовые классы, чтобы показать покрытие ваших обычных занятий.

1 голос
/ 12 марта 2012

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

target="abc";
MyBean.setTarget(target);

не выполняются.

Три дополнительных соображения:

  • в одном методе тестирования два теста - у вас должен быть одинметод тестирования, который проверяет исключение, и метод, проверяющий счастливый путь
  • Как упоминалось в ответе spookyjon, инструменты покрытия кода обычно не используются для проверки охвата методов тестирования.
  • Если кодпосле того, как сработает исключение, вы получите покрытие.Но так как нет никаких утверждений, вы бы на самом деле ничего не проверяли, за исключением того факта, что не произошло неожиданного исключения.Тесты без утверждений не имеют особого смысла.
...