Перейти к основному содержимому

JUnit 4 о том, как игнорировать базовый тестовый класс

· 3 мин. чтения

1. Обзор

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

2. Обойти базовый класс испытаний

Предположим, у нас есть класс BaseUnitTest с некоторыми вспомогательными методами:

public class BaseUnitTest {
public void helperMethod() {
// ...
}
}

Теперь давайте расширим его классом с тестами:

public class ExtendedBaseUnitTest extends BaseUnitTest {
@Test
public void whenDoTest_thenAssert() {
// ...
}
}

Если мы запустим тесты либо с помощью IDE, либо со сборкой Maven, мы можем получить сообщение об ошибке, сообщающее нам об отсутствии доступных для выполнения тестовых методов в BaseUnitTest . Мы не хотим запускать тесты в этом классе, поэтому ищем способ избежать этой ошибки.

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

2.1. Переименовать класс

Мы можем переименовать наш класс в имя, которое соглашение о сборке исключит из запуска в качестве теста. Например, если мы используем Maven, мы можем проверить значения по умолчанию для плагина Maven Surefire .

Мы могли бы изменить имя с BaseUnitTest на BaseUnitTestHelper или подобное :

public class BaseUnitTestHelper {
public void helperMethod() {
// ...
}
}

2.2. Игнорировать

Второй вариант — временно отключить тесты с помощью аннотации JUnit @Ignore . Мы можем добавить его на уровне класса, чтобы отключить все тесты в классе :

@Ignore("Class not ready for tests")
public class IgnoreClassUnitTest {
@Test
public void whenDoTest_thenAssert() {
// ...
}
}

Точно так же мы можем добавить его на уровне метода , если нам все еще нужно запустить другие тесты в классе, но исключить только один или несколько:

public class IgnoreMethodTest {
@Ignore("This method not ready yet")
@Test
public void whenMethodIsIgnored_thenTestsDoNotRun() {
// ...
}
}

Если вы работаете с Maven, мы увидим вывод, например:

Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.041 s - in com.foreach.IgnoreMethodTest

Аннотация @Disabled заменяет @Ignore , начиная с JUnit 5 .

2.3. Сделать базовый класс абстрактным

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

Давайте сделаем наш класс BaseUnitTest абстрактным:

public abstract class BaseUnitTest {
public void helperMethod() {
// ...
}
}

3. Заключение

В этой статье мы видели несколько примеров исключения базового тестового класса из выполнения тестов в JUnit 4 . Лучшим подходом является создание абстрактных классов.

Аннотация JUnit @Ignore также широко используется, но считается плохой практикой. Игнорируя тесты, мы можем забыть о них и о причине их игнорирования .

Как всегда, код, представленный в этой статье, доступен на GitHub .