Почему покрытие кода измеряется в тестовых примерах?

Я измерил покрытие кода с помощью EclEmma. Я ожидал, что тестируются только пакеты с исходным кодом. Удивительно, но тестовые случаи JUnit также измеряются.

public class EmailTest {

public static final String VALID_MAIL = "[email protected]";

public static final String INVALID_MAIL_WITHOUT_AT = "xyzqwe.abc";

@Test
public void shouldCreateValidEmail() {
    Email email = null;
    try {
        email = new Email (VALID_MAIL);
    } catch (NotValidEmailException e) {
        Assert.fail();
    }
    Assert.assertEquals("Email: " + VALID_MAIL + " should be correct created", VALID_MAIL, email.getEmail());
}

@Test(expected = NotValidEmailException.class)
public void shouldThrowExceptionWhenMailHasNoAt() throws NotValidEmailException {
    new Email (INVALID_MAIL_WITHOUT_AT);
}

Например, у меня есть базовый тестовый пример для проверки регулярных выражений по электронной почте. Покрытие тестами для этого тестового класса «EmailTest» составляет 73%. Тестируемый класс «Электронная почта» покрыт на 100%.

Почему измеряется покрытие кода в тест-кейсах и для чего это нужно?


person pobu    schedule 30.12.2018    source источник
comment
Как он узнает, что не следует захватывать покрытие кода тестового кода, если вы не скажете ему этого не делать? Поскольку вы этого не сделали, он захвачен.   -  person Andreas    schedule 30.12.2018
comment
Да, ты прав. Тестовые пакеты могут быть исключены из области анализа меры покрытия кода.   -  person pobu    schedule 30.12.2018
comment
Затем либо напишите самостоятельный ответ с таким содержанием, либо рассмотрите возможность удаления вопроса. Нет смысла держать вопрос, на который есть прямой ответ, в небольшом комментарии.   -  person GhostCat    schedule 30.12.2018


Ответы (2)


Вы можете исключить тестовый код из покрытия, но не должны этого делать. Покрытие предназначено для того, чтобы рассказать вам важные вещи о вашем коде. Ваш тестовый код также важен. Например, у вас может быть код в помощниках по тестированию, который никогда не запускается: вы можете удалить этот код. Или вы можете случайно написать тестовые строки, которые по какой-то причине никогда не выполняются.

Единственная причина для исключения тестового кода — если вы поставили перед собой какую-то произвольную цель, например покрытие 75%, и не хотите «обмануть», включив свои тесты. В этих целях нет смысла, поэтому не позволяйте им ограничивать то, что вы узнаете из освещения.

person Ned Batchelder    schedule 30.12.2018

Тестовые пакеты могут быть исключены из области анализа меры покрытия кода.

Покрытие как -> Конфигурации покрытия -> Покрытие -> Область анализа

person pobu    schedule 30.12.2018