봄 부팅에서 단위 테스트 또는 통합 테스트

니콘 :

나는 온라인에서 테스트에 관련된 다양한 튜토리얼을보고 Spring Boot하고, 테스트가 언급 된 방법에 의해 혼동되었다.

일부 기사를 사용하는 것이 컨트롤러 테스트를 참조 @WebMvcTest로 주석 Unit Test일부 반면이로 참조 Integration Test. 하나가 올바른지 확실하지 않습니다.

같은 질문에 저장소 계층 테스트에 적용됩니다 @DataJpaTest.

내 응용 프로그램 작성이 개 테스트 컨트롤러에 대한 하나는 저장소에 대한 또 다른 하나를 다음했다.

바닥에 나는 모두에 대한 몇 가지 질문이 있습니다. 안내하시기 바랍니다.

UserControllerTest.java

@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
public class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;
    @MockBean
    private UserRepository userRepository;

    @Test
    public void signUp() throws Exception {
        this.mockMvc.perform(get("/signup")).andExpect(status().isOk());
    }

}

UserRepositoryTest.java

@RunWith(SpringRunner.class)
@DataJpaTest
public class UserRepositoryTest {

    @Autowired
    private TestEntityManager entityManager;
    @Autowired
    private UserRepository userRepository;

    @Test
    public void whenFindByName_thenReturnEmployee() {
        // given
        User u = new User();
        u.setName("ab");
        u.setEmail("[email protected]");
        entityManager.persistAndFlush(u);
        // when
        Optional<User> user = userRepository.findById(1L);
        // then
        assertTrue(user.isPresent());
    }

}

내 질문이 있습니다 :

  1. 주석을 하는가 @WebMvcTest, @DataJpaTest또는 @SpringBootTest시험의 유형을 결정 ( Unit또는 Integration) 또는 그것의 사용이다 @MockBean를 결정하는 시험에서?
  2. 그 가정하면 UserControllerTest.java우리가 조롱하는 단위 테스트입니다 userRepository여기 의존성 @MockBean private UserRepository userRepository에 반면에 UserRepositoryTest.java우리가 그것을 autowiring에 있습니다 @Autowired private UserRepository userRepository. 왜 ??
브랜든 :

봄 부팅을 사용하여 단위 테스트 및 통합 테스트의 주요 차이점은, 통합 테스트가 실행이 시작되기 전에 Spring 컨텍스트를 부트 스트랩 반면 단위 테스트를 분리하여 실행할 수 있다는 것입니다.

단독으로 실행하면 테스트중인 컨트롤러를 기반으로 종속성을 조롱해야합니다. 이렇게하면 자신이 데이터베이스 또는 서비스의 오버 헤드에 대해 걱정할 필요없이 매우 구체적인 테스트 케이스는 엔드 - 투 - 엔드 테스트 할 수 있습니다. 따라서, 주석 @MockBean를 사용하여.

반면, 통합 테스트는 데이터베이스와 응용 프로그램의 다른 레이어를 통합에 초점을 맞추고 있습니다. 대부분의 사람들은 자신의 저장소를 테스트하는 등의 H2와 같은에서 메모리 데이터베이스를 활용합니다. 통합 테스트는 조롱을 포함 할 수 없습니다 및 테스트의 두 가지 유형 별도로 실행해야합니다.

자원 : https://www.baeldung.com/spring-boot-testing

추천

출처http://43.154.161.224:23101/article/api/json?id=233298&siteId=1