Closed a-young-kim closed 8 months ago
xml 파일에서 미리 생성해둔 applicationContext 를 가져오고@DirtiesContext 를 통해 @Before 에서는 @Bean userDaO 를 변경 (재구성) 해주는 것 같습니다.
setUp()이라는 메소드는 \@before 어노테이션으로 인해 테스트 메소드가 실행하기 전에 무조건 실행되어야 하는 메소드라고 알고 있는데 그러면 항상 context가 변경되는 것 아닌가요?? -> 저도 동일하게 이해했습니다.
해당 어노테이션이 있지 않아도 SingleConnectionDataSource이 테스트 메소드가 실행될 때 생성되어서 영향을 주지 않을 것이라고 생각이 들었습니다
-> 이 부분은 현재 테스트 클래스가 아닌 다른 테스트 클래스를 실행할 때 문제가 된다고 이해했습니다. 만약 \@DirtiesContext 가 없다면, 현재 테스트 클래스는 SingleConnectionDataSource
를 테스트에 사용할 것이고 매번 초기화해주니 문제되지 않겠지만 현재 클래스에서 테스트가 진행된 이후 동일한 애플리케이션 컨텍스트를 공유하는 (DataSource를 별도로 다시 초기화해주는지 확신할 수 없는) 다른 테스트 클래스의 테스트 메서드를 실행하게 되면 해당 테스트는 테스트용 SingleConnectionDataSource
를 사용해야 하는지 xml에 기본 설정된 빈을 사용해야 하는지 알 수 없기 때문에 컨텍스트의 상태를 변경하는 것이 위험하다고 이해했습니다.
@DiritesContext이 있지 않아도 SingleConnectionDataSource이 테스트 메소드가 실행될 때 생성되어서 영향을 주지 않을 것이라고 생각이 들었습니다. 해당 어노테이션이 필요한 이유가 무엇일까요? 답: 해당 테스트 클래스만 실행할 경우에는 @Before에서 새로운 DataSource를 생성하므로 오류가 발생하지는 않지만 여러 테스트 클래스를 실행할 경우 오류가 발생할 수 있습니다. DataSource를 @Before에서 초기화하지 않는 다른 클래스 경우 UserDaoTest 완료 후 변경된 context가 사용될 수 있기 때문에 @DirtiesContext를 사용해야합니다.
p.193
이 테스트 코드는
라고 설명되어 있습니다. 하지만 setUp()이라는 메소드는 @Before 어노테이션으로 인해 테스트 메소드가 실행하기 전에 무조건 실행되어야 하는 메소드라고 알고 있는데 그러면 항상 context가 변경되는 것 아닌가요?? 또한, 해당 어노테이션이 있지 않아도 SingleConnectionDataSource이 테스트 메소드가 실행될 때 생성되어서 영향을 주지 않을 것이라고 생각이 들었습니다.