2015-02-18 5 views
0

Во время модульного тестирования существует ли способ включить анализ покрытия кода только в течение нескольких этапов?Кодовое покрытие геттера через утверждение

Я хочу измерить покрытие кода утвердительной части теста. Инструменты, которые я использую в настоящее время, не имеют значения, если строка выполняется во время действия-части теста или во время команды assert-part.

Соответственно, я не могу проверить, читается ли весь получатель моих бобов методом assert. В идеале я хочу активировать меру покрытия только во время выполнения некоторых из моих методов.

Образец кода:

//method to test 
void runToTest(Bean myBean){ 
    myBean.setA(1); 
    myBean.setB(2); 
    aString=myBean.getA()+myBean.getB(); 
} 

@Test 
void should_check_all_field(){ 
    myBean=new Bean() 
    myService.runToTest(myBean); 
    assertMethode(); 

} 
void assertMethod(){ 
    Assert.assertNotNull(myBean.getA()) 
} 

В настоящее время инструменты я использую отчет, чем Гета и getB покрыты. Я хочу, чтобы определить, что getB не был прочитан assertMethod.

Я использую Java и IntelliJ, а мой тестовый класс следует за синтаксисом Arrange-Act-Assert.

ответ

0

Нет, я не знаю ни одного инструмента, который поддерживает эту функцию.

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

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

Смотрите также: https://stackoverflow.com/a/27400613/584532

0

Исправьте меня, если я что-то не понял, вы делаете тест JUnit, а затем проверяете покрытие как часть теста? Мне кажется, что это ручной подход для меня, что вам не нужно в тестировании JUnit, верно?

В следующем примере я использовал EasyMock, но вы можете использовать все, что вы предпочитаете ;-)

@Test 
public void testGetters() { 
    Bean bean = EasyMock.createMock(Bean.class); 
    // set your expectations 
    EasyMock.expect(bean.getA()).andReturn(0).times(1); 
    EasyMock.replay(bean); 

    // use the bean 
    bean.getA(); // if this is commented, test fails 

    // verify your expectations 
    EasyMock.verify(bean); 
} 

Это похоже на то, что вы хотите достичь?

Я использовал Maven проект и мои зависимостей

<dependencies> 

    <dependency> 
     <groupId>org.easymock</groupId> 
     <artifactId>easymock</artifactId> 
     <version>3.3.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
    </dependency> 

</dependencies> 
+0

Я понимаю, чем мое требование странно, но я просто взять на себя проект с хорошим покрытием коды ... но очень немногие утверждают. Многие настроенные поля модели не тестируются, и это очень повторяется, чтобы проверить все (модель очень вежливая). Но это швы очень просто использовать инструмент измерения покрытия, чтобы извлечь использованный геттер и поставить красным неиспользованные. – sab