컨트롤러 중 하나에서 트랜잭션 로직을 테스트하는 스프링 부트를 사용하여 통합 테스트를 작성하려고합니다.스프링 부트 통합 테스트 테스트 컨트롤러 종속성
- 를 주입하는 동안 이메일을 보내 실제로 피하기 위해 모의와 컨트롤러 종속성에 이메일 의존성을 교체 @Inject
- 를 사용하여 내 컨트롤러 중 하나 : 테스트가 무엇을해야 은 다음과 같다 통합 테스트.
- 컨트롤러의 메서드 호출
- 메일 보내기 모의 예외가 throw되면 호출 된 메서드의 트랜잭션이 제대로 롤백됩니다.
지금 내 문제는 테스트가 실행될 때, 컨트롤러가 내 테스트 클래스에 주입하지만, 모든 의존성이 null
이다 점이다. 때문에 전체 스프링 웹 애플리케이션 컨텍스트를 시작하는 통합 테스트, 내 컨트롤러가 이미 autowire가 모든 종속성이있을 것이라고 예상하고 있었다되는 시험에
@RunWith(SpringJUnit4ClassRunner.class)
@IntegrationTest
@SpringApplicationConfiguration(App.class)
@WebIntegrationTest
public MyIntegrationTest() {
@Inject MyController controller;
@Before
public void before() {
// replace one particular dependency of controller with a mock
}
@Test
public void testFoo() { ... }
}
, 그러나 그것은 분명하지 않다 : 여기 내 통합 테스트입니다 대신에 모든 종속성이 null로 설정됩니다.
질문 : 일부 추가 주석을 사용하거나 내 @Before
방법으로 설정해야합니까? 아니면 완전히 잘못된면에서 문제에 접근하고 있습니까?
업데이트 : TestRestTemplate 또는 MockMvc와 같은 HTTP를 통한 테스트없이 Spring MVC Layer를 테스트 할 수 있습니까? 하지만 직접
'@ Autowire '또는'@ Inject'를 사용하여 서비스 클래스를 테스트에 삽입하면 똑같은 일이 발생합니다. 테스트 클래스에 서비스 클래스를 주입 시키지만, 보통'@ Autowire' 나'@Inject'를 사용하여 주입되는 서비스 클래스 내부의 의존성은'null'입니다. 예를 들어, 테스트 클래스에'UserService'를 주입하고 있습니다. 사용자 서비스는'PasswordEncoder' 빈과'UserRepository' 빈을 가지며 모두 null입니다. – lanoxx
답변을 업데이트했으며 방금 테스트를 통과 했으므로 제대로 작동합니다. 실제 컨트롤러 방법이 작동하면 테스트가 작동해야합니다. 당신이 놓친 것을보세요. – Avinash
메인 메소드를 포함하고있는'App.class'는 상당히 간단합니다. 단지'@ SpringBootApplication' 만 사용하고'configure' 메소드는 없습니다. – lanoxx