2012-03-12 3 views
0

У меня есть фрагмент кода следующим образомПокрытие кода для блока, который имеет броски

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, не распространяется. Он всегда отображается красным цветом.

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

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

ответ

1

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

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

не выполнены.

Три дополнительные мысли:

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

Большое спасибо. В этом есть смысл –

2

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

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

+0

Дело в том, что если я удалю блок, предназначенный для исключения, покрытие метода класса тестирования отображается как 100%. Если это не предназначено для тестового класса, почему он вообще показывает покрытие для тестового класса? –

Смежные вопросы