Интеграционное тестирование в Spring: аннотации тестирования Spring JUnit 4
Следующие аннотации поддерживаются только при использовании вместе с SpringRunner, Spring JUnit 4 rules, классами поддержки Spring JUnit 4:
- @IfProfileValue
- @ProfileValueSourceConfiguration
- @Timed
- @Repeat
@IfProfileValue
@IfProfileValue указывает, что аннотированный тест включен для конкретной среды тестирования. Если настроенный ProfileValueSource возвращает соответствующее значение для предоставленного имени, тест включен. В противном случае тест отключается и фактически игнорируется.
Вы можете применить @IfProfileValue на уровне класса, на уровне метода или на обоих уровнях. Использование @IfProfileValue на уровне класса имеет приоритет над использованием на уровне метода для любых методов в этом классе или его подклассах. В частности, тест включен, если он включен как на уровне класса, так и на уровне метода. Отсутствие @IfProfileValue означает, что тест включен неявно. Это аналогично семантике аннотации @Ignore в JUnit 4, за исключением того, что наличие @Ignore всегда отключает проверку.
В следующем примере показан тест с аннотацией @IfProfileValue:
// Выполняется этот тест,
// только если поставщиком Java является Oracle Corporation.
@IfProfileValue(name="java.vendor", value="Oracle Corporation")
@Test
public void testProcessWhichRunsOnlyOnOracleJvm() {
// некоторая логика,
// которая должна работать только
// на виртуальных машинах Java от Oracle
}
В качестве альтернативы вы можете настроить @IfProfileValue со списком значений (с семантикой OR), чтобы добиться поддержки, подобной TestNG, для тестовых групп в среде JUnit 4. Рассмотрим следующий пример:
// Тест запускается для модульных тестов и интеграционных тестов.
@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
@Test
public void testProcessWhichRunsForUnitOrIntegrationTestGroups() {
// некоторая логика,
// которая должна работать только для групп
// модульного и интеграционного тестирования
}
@ProfileValueSourceConfiguration
@ProfileValueSourceConfiguration - это аннотация уровня класса, которая указывает, какой тип ProfileValueSource использовать при извлечении значений профиля, настроенных с помощью аннотации @IfProfileValue. Если @ProfileValueSourceConfiguration не объявлен для теста, по умолчанию используется SystemProfileValueSource. В следующем примере показано, как использовать @ProfileValueSourceConfiguration:
// Использовать источник значений настраиваемого профиля.
@ProfileValueSourceConfiguration(CustomProfileValueSource.class)
public class CustomProfileValueSourceTests {
// тело класса...
}
@Timed
@Timed указывает, что аннотированный тестовый метод должен завершить выполнение в указанный период времени (в миллисекундах). Если время выполнения текста превышает указанный период времени, тест не проходит.
Период времени включает запуск самого метода тестирования, любые повторения теста (@Repeat), а также любую настройку или отключение тестового устройства. В следующем примере показано, как его использовать:
@Timed(millis = 1000)
public void testProcessWithOneSecondTimeout() {
// некоторая логика,
// выполнение которой не должно занимать больше 1 секунды
}
Аннотации Spring @Timed имеют другую семантику, чем поддержка @Test(timeout=…) в JUnit 4. В частности, из-за того, как JUnit 4 обрабатывает тайм-ауты выполнения теста (то есть, выполняя тестовый метод в отдельном потоке), @Test(timeout=…) заранее не проходит тест, если тест занимает слишком много времени. С другой стороны, Spring @Timed не завершает тест заранее, а скорее ожидает завершения теста, прежде чем потерпеть неудачу.
@Repeat
@Repeat указывает, что аннотированный тестовый метод необходимо запускать повторно. Количество запусков метода тестирования указано в аннотации.
Объем повторяемого выполнения включает выполнение самого метода тестирования, а также любую настройку или отключение тестового устройства. В следующем примере показано, как использовать аннотацию @Repeat:
// Повторить этот тест десять раз
@Repeat(10)
@Test
public void testProcessRepeatedly() {
// ...
}
Читайте также:
- Интеграционное тестирование в Spring: аннотации Spring Testing, @DirtiesContext
- Интеграционное тестирование в Spring: аннотации Spring Testing, @Commit, @Rollback
- Интеграционное тестирование в Spring: аннотации Spring Testing, @Sql, @SqlConfig, @SqlMergeMode, @SqlGroup
Комментарии
Отправить комментарий