Рубрики
Без рубрики

Краткое руководство по @DirtiesContext

Узнайте, как использовать аннотацию «@DirtiesContext весны» для тестирования

Автор оригинала: baeldung.

1. Обзор

В этом быстром учебнике мы узнаем о @DirtiesContext аннотация. Мы также покажем стандартный способ использования аннотации для тестирования.

2. @DirtiesContext

@DirtiesContext является Весеннее тестирование аннотации . Он указывает, что связанный тест или класс изменяет ПриложениеКонтекст . Он сообщает структуре тестирования, чтобы закрыть и воссоздать контекст для более поздних тестов.

Мы можем аннотировать метод тестирования или весь класс. Установив МетодМод или КлассМод , мы можем контролировать, когда Весна отмечает контекст для закрытия .

Если мы разохим @DirtiesContext на классе аннотация применяется к каждому методу в классе с данной КлассМод.

3. Тестирование без очистки весеннего контекста

Допустим, у нас есть Пользователь :

public class User {
    String firstName;
    String lastName;
}

У нас также есть очень простой ПользовательКаш:

@Component
public class UserCache {

    @Getter
    private Set userList = 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 .