1. Обзор
В этом быстром учебнике мы узнаем о @DirtiesContext аннотация. Мы также покажем стандартный способ использования аннотации для тестирования.
2. @DirtiesContext
@DirtiesContext является Весеннее тестирование аннотации . Он указывает, что связанный тест или класс изменяет ПриложениеКонтекст . Он сообщает структуре тестирования, чтобы закрыть и воссоздать контекст для более поздних тестов.
Мы можем аннотировать метод тестирования или весь класс. Установив МетодМод или КлассМод , мы можем контролировать, когда Весна отмечает контекст для закрытия .
Если мы разохим @DirtiesContext на классе аннотация применяется к каждому методу в классе с данной КлассМод.
3. Тестирование без очистки весеннего контекста
Допустим, у нас есть Пользователь :
public class User { String firstName; String lastName; }
У нас также есть очень простой ПользовательКаш:
@Component public class UserCache { @Getter private SetuserList = new HashSet<>(); public boolean addUser(String user) { return userList.add(user); } public void printUserList(String message) { System.out.println(message + ": " + userList); } }
Мы создаем интеграционный тест для загрузки и тестирования полного приложения:
@TestMethodOrder(OrderAnnotation.class) @ExtendWith(SpringExtension.class) @SpringBootTest(classes = SpringDataRestApplication.class) class DirtiesContextIntegrationTest { @Autowired protected UserCache userCache; ... }
Первый метод, добавитьJaneDoeAndPrintCache , добавляет запись в кэш:
@Test @Order(1) void addJaneDoeAndPrintCache() { userCache.addUser("Jane Doe"); userCache.printUserList("addJaneDoeAndPrintCache"); }
После добавления пользователя в кэш он печатает содержимое кэша:
addJaneDoeAndPrintCache: [Jane Doe]
Далее, РаспечататьКаш снова печатает кэш пользователя:
@Test @Order(2) void printCache() { userCache.printUserList("printCache"); }
Он содержит имя, добавленное в предыдущем тесте:
printCache: [Jane Doe]
Допустим, более поздний тест опираясь на пустой кэш для некоторых утверждений. Ранее вставленные имена могут вызывать нежелательное поведение.
4. Использование @DirtiesContext
Теперь мы покажем @DirtiesContext с значением МетодМод , AFTER_METHOD . Это означает, что Spring будет отмечать контекст для закрытия после завершения соответствующего метода тестирования.
Чтобы изолировать изменения в тесте, мы добавляем @DirtiesContext . Давайте посмотрим, как это работает.
addJohnDoeAndPrintCache метод тестирования добавляет пользователя в кэш. Мы также добавили @DirtiesContext аннотация, в которой говорится, что контекст должен закрыться в конце тестового метода:
@DirtiesContext(methodMode = MethodMode.AFTER_METHOD) @Test @Order(3) void addJohnDoeAndPrintCache() { userCache.addUser("John Doe"); userCache.printUserList("addJohnDoeAndPrintCache"); }
Выход теперь:
addJohnDoeAndPrintCache: [John Doe, Jane Doe]
Наконец, РаспечататьКачеАгайн снова печатает кэш:
@Test @Order(4) void printCacheAgain() { userCache.printUserList("printCacheAgain"); }
Запуск полного тестового класса, мы видим, весенний контекст перезагрузки между addJohnDoeAndPrintCache и РаспечататьКачеАгайн . Таким образом, кэш переитиализируется, и выход пуст:
printCacheAgain: []
5. Другие поддерживаемые этапы испытаний
В приведеном выше примере показана после текущего метода тестирования фаза. Давайте сделаем краткое резюме этапов:
5.1. Уровень класса
КлассМод параметры тестового класса определяют, когда контекст сбрасывается :
- BEFORE_CLASS: Перед текущим тестовым классом
- BEFORE_EACH_TEST_METHOD: Перед каждым методом тестирования в текущем тестовом классе
- AFTER_EACH_TEST_METHOD: После каждого метода тестирования в текущем тестовом классе
- AFTER_CLASS: После текущего тестового класса
5.2. Методный уровень
МетодМод параметры для отдельного метода определяют, когда контекст сбрасывается :
- BEFORE_METHOD: До текущего метода тестирования
- AFTER_METHOD : После текущего метода тестирования
6. Заключение
В этой статье мы представили @DirtiesContext тестирование аннотации.
Как всегда, пример кода доступен более на GitHub .