This lesson focuses on understanding the use of the @DirtiesContext
annotation in Spring Boot testing to manage test interactions and the application context.
Key Points:
@DirtiesContext
:
@DirtiesContext
annotation indicates that the Spring application context has been modified and should be closed and removed from the context cache.CashCardApplicationTests.java
, there are two uses of this annotation:
shouldCreateANewCashCard
test method (also commented out initially).The class-level @DirtiesContext
annotation is commented out to observe its effect:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
class CashCardApplicationTests {
Running all the tests after commenting out results in a test failure.
The shouldReturnAllCashCardsWhenListIsRequested
test fails with an AssertionFailedError
, expecting 3 CashCards but finding 4.
expected: 3
but was: 4
The failure occurs because another test is interfering by creating a new Cash Card, which affects the shared application context.
@DirtiesContext
:
@DirtiesContext
helps by resetting the Spring application context to a clean state after each test, preventing side effects between tests.@DirtiesContext
:
@DirtiesContext
can prevent test interference, it should not be used indiscriminately due to the overhead of reloading the application context.@DirtiesContext
at Method Level:
Leave the class-level @DirtiesContext
commented out.
Uncomment and apply @DirtiesContext
on the specific test method that creates a new Cash Card:
//@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
class CashCardApplicationTests {
...
@Test
@DirtiesContext
void shouldCreateANewCashCard() {
...
}
This ensures that only the application context for this test is reset after execution.
Conclusion:
@DirtiesContext
ensures test isolation without unnecessary performance costs.테스트 상호 작용과 @DirtiesContext
이번 강의는 Spring Boot 테스트에서 @DirtiesContext
애노테이션을 이해하고, 테스트 간의 상호 작용과 애플리케이션 컨텍스트를 관리하는 방법에 대해 다룹니다.
주요 내용:
@DirtiesContext
소개:
@DirtiesContext
애노테이션은 Spring 애플리케이션 컨텍스트가 변경되었음을 나타내며, 컨텍스트를 닫고 컨텍스트 캐시에서 제거하도록 합니다.CashCardApplicationTests.java
에서 이 애노테이션은 두 군데 사용됩니다:
shouldCreateANewCashCard
테스트 메소드 레벨(초기에 주석 처리됨).클래스 레벨의 @DirtiesContext
애노테이션을 주석 처리하여 영향도를 관찰합니다:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
class CashCardApplicationTests {
주석 처리 후 모든 테스트를 실행하면 테스트 실패가 발생합니다.
shouldReturnAllCashCardsWhenListIsRequested
테스트가 AssertionFailedError
와 함께 실패하며, 기대했던 CashCard 수는 3개였지만 실제로는 4개였습니다.
expected: 3
but was: 4
이는 다른 테스트에서 새로운 Cash Card를 생성하여 공유된 애플리케이션 컨텍스트에 영향을 미쳤기 때문입니다.
@DirtiesContext
이해하기:
@DirtiesContext
는 각 테스트 후에 Spring 애플리케이션 컨텍스트를 초기 상태로 재설정하여 테스트 간의 부작용을 방지합니다.