Introducción y uso de @Test en SpringBoot

Introducción a la prueba de arranque de primavera

SpringBoot proporciona funciones de prueba convenientes, que pueden realizar fácilmente pruebas unitarias y pruebas de integración. Incluye principalmente los siguientes puntos:

  • Spring Boot proporciona la anotación @SpringBootTest, que se puede utilizar para iniciar aplicaciones Spring Boot para pruebas de integración.
  • Spring Boot proporciona la anotación @MockBean, que se puede utilizar para Mock Bean.
  • Spring Boot proporciona la anotación @SpyBean, que puede usarse para espiar beans.
  • Spring Boot proporciona la anotación @SpringBootConfiguration, que se puede utilizar para declarar clases de configuración.
  • Spring Boot proporciona soporte para AssertJ, que se puede utilizar para realizar afirmaciones.
  • Spring Boot proporciona clases de herramientas relacionadas con pruebas, como TestRestTemplate, etc.
  • SpringBoot proporciona @LocalServerPort, que puede simular fácilmente el cliente y realizar pruebas de integración de un extremo a otro en el servicio en ejecución.
  • SpringBoot proporciona configuración automática de MockMvc, que es conveniente para la inyección directa y el uso de MockMvc en clases de prueba.

confiar

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

Notas comunes

@SpringBootTest

Esta anotación se utiliza para pruebas de integración e iniciará toda la aplicación Spring Boot para pruebas de un extremo a otro.

uso:

@SpringBootTest
public class MyTest {

  // 测试方法

}

El entorno de prueba se puede especificar mediante el parámetro webEnvironment:

  • MOCK: carga el contexto de la aplicación web sin iniciar el contenedor de servlet.

  • RANDOM_PORT: carga el contenedor de servlet y utiliza un puerto aleatorio.

  • DEFINED_PORT: carga el contenedor de servlet y utiliza el puerto definido.

  • NINGUNO: carga el contexto de la aplicación web, pero no inicia el contenedor de servlet.

@WebMvcTest

Esta anotación se utiliza para probar la capa web e inyectará automáticamente el Bean de la capa web, sin iniciar toda la aplicación Spring Boot.

uso:

@WebMvcTest(UserController.class)
public class MyTest {

  @Autowired
  private MockMvc mvc;

  // 测试方法

}

@DataJpaTest

Esta anotación se utiliza para probar beans relacionados con JPA y configurará automáticamente los beans relacionados con Spring Data JPA.

uso:

javaCopy code@DataJpaTest
public class MyTest {

  @Autowired
  private TestEntityManager entityManager;

  @Autowired
  private UserRepository userRepository;

  // 测试方法

}

@MockBean

Esta anotación se utiliza para simular un Bean e inyectarlo en la clase de prueba para realizar pruebas de aislamiento.

uso:

javaCopy code@SpringBootTest
public class MyTest {

  @MockBean
  private UserService userService;
  
  // 测试方法
  
}

@SpyBean

Esta anotación se utiliza para espiar un bean e inyectarlo en la clase de prueba sin afectar al bean real.

uso:

@SpringBootTest
public class MyTest {

  @SpyBean
  private UserService userService;
  
  // 测试方法
  
}

@SpringBootConfiguración

Esta anotación se utiliza para declarar clases de configuración, equivalente a @Configuration.

uso:

@SpringBootConfiguration
public class MyConfig {

  // 配置代码

}

Se puede utilizar en clases de prueba para cargar clases de configuración adicionales.

@PuertoServidorLocal

Esta es una anotación muy útil para obtener el número de puerto real de la instancia del servidor integrado iniciada para realizar pruebas.

La función principal y el uso son los siguientes:

El número de puerto del servidor para el inicio de la inyección automática.

En la clase de prueba, la anotación @LocalServerPort se puede utilizar así:

javaCopy code@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class MyTest {

  @LocalServerPort
  private int port;

  // 测试方法可以使用port变量

}

De esta forma, podrá obtener el número de puerto asignado aleatoriamente.

Úselo junto con @Value

@LocalServerPort también se puede combinar con @Value:

javaCopy code@Value("${local.server.port}")
private int port;

punto final de prueba

Con el número de puerto en mano, se puede verificar probando el punto final:

javaCopy code@Autowired
private TestRestTemplate restTemplate;

@Test
public void test() {
  String body = this.restTemplate.getForObject("http://localhost:" + port + "/hello", String.class);
  assertEquals("Hello World", body);
}

cliente simulado

El uso de @LocalServerPort puede simular de manera muy conveniente al cliente y realizar pruebas de integración de un extremo a otro en servicios en ejecución.

@AutoConfigureMockMvc

Esta es una anotación conveniente proporcionada por Spring Boot, que se puede usar para configurar automáticamente MockMvc para facilitar la inyección directa y el uso de MockMvc en clases de prueba.

Las funciones principales son las siguientes:

Inyectar automáticamente MockMvc

En la clase de prueba, puedes inyectar MockMvc directamente:

@Autowired
private MockMvc mvc;

No es necesario configurar MockMvc usted mismo.

Usar con @WebMvcTest

@AutoConfigureMockMvc se usa a menudo con @WebMvcTest para realizar pruebas unitarias de controladores:

@WebMvcTest
@AutoConfigureMockMvc
public class TestController {
    
    

  @Autowired
  private MockMvc mvc;
  
  @MockBean
  private UserService userService;

  @Test
  public void test() throws Exception {
    
    
    // 使用MockMvc进行请求测试
  }

}

Simular solicitudes HTTP

Con MockMvc, es fácil simular varias solicitudes HTTP para probar controladores:

// GET
mvc.perform(get("/users"))
  .andExpect(status().isOk()); 

// POST  
mvc.perform(post("/users"))
  .andExpect(status().isCreated());

// 模拟参数
mvc.perform(get("/users").param("name", "test"))
  .andExpect(content().string(containsString("test")));

respuesta de validación

MockMvc puede verificar el resultado de la respuesta:

mvc.perform(get("/users/1"))
  .andExpect(status().isOk())
  .andExpect(content().contentType(MediaType.APPLICATION_JSON)) 
  .andExpect(jsonPath("$.name").value("Test User")); 

En resumen, @AutoConfigureMockMvc puede simular de manera flexible solicitudes HTTP y verificar respuestas, lo que hace que sea muy conveniente probar la capa web. Por lo general, se usa junto con la anotación @WebMvcTest, lo que proporciona una gran comodidad para las pruebas de Spring Boot.

escribe al final

Si está interesado en artículos relacionados, puede prestar atención a la cuenta oficial "Architecture Palace" y continuará actualizando AIGC, preguntas de entrevistas básicas de Java, netty, spring boot, spring cloud y otras series de artículos, y una serie de ¡Los productos secos se entregarán en cualquier momento!

Supongo que te gusta

Origin blog.csdn.net/jinxinxin1314/article/details/132380327
Recomendado
Clasificación