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 .