Miré varias tutorial en línea relacionados con las pruebas en Spring Boot
y se confundió por la forma en que se refieren las pruebas.
Algunos artículos se refieren a pruebas de controlador que el uso @WebMvcTest
de la anotación como Unit Test
mientras que algunos se refieren como Integration Test
. No está seguro de cuál es la correcta.
Las mismas preguntas se aplica a prueba capa de repositorio con @DataJpaTest
.
He tras dos pruebas escritas en mi solicitud, una para el controlador y otro para el repositorio.
En la parte inferior Tengo algunas preguntas con respecto a ambos. Por favor guíe.
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());
}
}
Mis preguntas son:
- Hace la anotación
@WebMvcTest, @DataJpaTest
o@SpringBootTest
determina el tipo de prueba (Unit
oIntegration
) o es el uso de@MockBean
dentro de la prueba de que lo determina? - Si se asume que
UserControllerTest.java
es una prueba de unidad que estamos burlando de lauserRepository
dependencia aquí con@MockBean private UserRepository userRepository
mientras que enUserRepositoryTest.java
estamos Autowiring con@Autowired private UserRepository userRepository
. Por qué ??
La principal diferencia entre las pruebas unitarias y pruebas de integración utilizando la primavera de arranque, es que las pruebas unitarias se pueden ejecutar de manera aislada, mientras que las pruebas de integración serán arrancar contexto primavera antes de que comience la ejecución.
Correr en el aislamiento requiere que se burlan de sus dependencias basadas en el controlador que está probando. Al hacer esto, se va a permitir a sí mismo para probar los casos de prueba muy específicas de extremo a extremo sin tener que preocuparse por la sobrecarga de una base de datos o un servicio. Por lo tanto, utilizando el @MockBean anotación.
Mientras que, las pruebas de integración se centra en la integración de las diferentes capas de la aplicación, como la base de datos. La mayoría de las personas utilizan una base de datos en la memoria como el H2 para poner a prueba sus repositorios. Pruebas de integración no deben contener ninguna burla y ambos tipos de pruebas se deben ejecutar por separado.
De recursos: https://www.baeldung.com/spring-boot-testing