tutorial básico do springboot2.x: teste de unidade

O teste de unidade é usado para testar componentes de código individuais e garantir que o código funcione conforme o esperado. Os testes de unidade são escritos e executados por desenvolvedores. Na maioria dos casos, estruturas de teste como JUnit ou TestNG são usadas. Os casos de teste geralmente são escritos no nível do método e executados por meio de automação.
Spring Boot fornece algumas anotações e ferramentas para ajudar os desenvolvedores a testar seus aplicativos.
Antes de falar sobre o teste de unidade springboot, vamos apresentar brevemente os tipos de teste de software (de uma perspectiva de desenvolvimento) e como escrever um teste de unidade.

Tipo de teste de software

  1. Teste de unidade: usado para testar componentes de código individuais e garantir que o código funcione conforme o esperado. Os testes de unidade são escritos e executados por desenvolvedores.
  2. Teste de integração: Verifique se todo o sistema está funcionando corretamente. O teste de integração também é feito por desenvolvedores, mas em vez de testar componentes individuais, o objetivo é testar os componentes. O sistema consiste em muitos componentes individuais, como código, banco de dados, servidor web, etc. O teste de integração pode encontrar problemas como conexão de componentes, acesso à rede e problemas de banco de dados.
  3. Teste funcional: Verifique se cada recurso está implementado corretamente, comparando o resultado da entrada fornecida com a especificação. Esse estágio geralmente é realizado pela equipe de testes dedicada da empresa.
  4. Teste de aceitação: O teste de aceitação visa garantir que o software está pronto, de acordo com o contrato do projeto, a declaração de atribuição e o documento de aceitação acordado por ambas as partes, para mostrar ao comprador do software os requisitos originais do software.

Pontos de teste de unidade

  1. A granularidade do teste está no nível do método.
  2. O resultado do caso de teste deve ser estável.
  3. O caso de teste deve escrever o mínimo de lógica possível ou não escrever a lógica de teste.
  4. Os casos de teste devem ter uma alta taxa de cobertura, cobrindo entradas e saídas básicas, e alguns limites também devem ser cobertos.
  5. Use asserções em vez de emitir declarações impressas.
  6. O caso de teste de unidade deve ter um bom nome, como test_MethodName ()

Teste de unidade de integração SpringBoot

Introduzir dependências

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

Dependência

  1. JUnit - O padrão de fato para aplicativos Java de teste de unidade.
  2. Spring Test e Spring Boot Test - Utilitários e suporte de teste de integração para aplicativos Spring Boot.
  3. AssertJ - Uma biblioteca de asserções fluente.
  4. Hamcrest - uma biblioteca de objetos correspondentes (também conhecidos como restrições ou predicados).
  5. Mockito - Uma estrutura de simulação Java.
  6. JsonPath - XPath para JSON

Descrição de anotação comum

  • @RunWith (SpringRunner.class)
    JUnit é executado usando o suporte de teste do Spring. SpringRunner é o novo nome de SpringJUnit4ClassRunner. O objetivo de fazer isso é apenas para tornar o nome mais simples.
  • @SpringBootTest é
    usado para teste de aplicativos Spring Boot. Por padrão, ele pesquisará nível por nível de acordo com o nome do pacote. Ele sempre encontra o programa principal Spring Boot. Ele determina se o programa principal é o programa principal, se a anotação de classe contém @SpringBootApplication e inicia a classe durante o teste. Crie um ambiente de contexto Spring.
  • @BeforeClass
    é executado apenas uma vez para todos os testes e deve ser estático nulo
  • Método de
    inicialização @BeforeEach , executado antes de cada método de teste da classe de teste atual ser executado

  • Método de teste @Test , onde você pode testar a exceção esperada e o tempo limite
  • @AfterEach
    libera recursos e executa cada método de teste da classe de teste atual
  • @AfterClass
    é executado apenas uma vez para todos os testes e deve ser estático nulo

  • Métodos de teste ignorados por @Ignore

Asserção de uso comum

  1. assertNotNull ("mensagem", A) // O juiz A não está vazio
  2. assertFalse ("mensagem", A) // A condição de julgamento A não é verdadeira
  3. assertTure ("mensagem", A) // Julgando a condição A é verdadeira
  4. assertEquals (“mensagem”, A, B) // 判断 A.equals (B)
  5. assertSame (“mensagem”, A, B) // 判断 A == B

método de teste

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest  {
    @Autowired
    UserRepository userRepository;
    @Test
    @Ignore
    public void testFindAll(){
        Page<UserDO> userDOS= userRepository.findAll(PageRequest.of(1,10));
        Assert.assertNotNull(userDOS.getContent());
    }
    @Test(expected = RuntimeException.class)
    public void testNullPointerException(){
        throw new RuntimeException();
    }
}

Interface API de teste

  • MockMvcRequestBuilders
    constrói o caminho da solicitação, os parâmetros da solicitação e outras informações
  • andExpect
    adiciona uma afirmação para determinar se o resultado atende às expectativas
  • andDo
    adiciona um processador de resultado, como a impressão no exemplo
  • andReturn
    retorna o MvcResult após a verificação bem-sucedida, que é usado para verificação personalizada / processamento assíncrono da próxima etapa.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest {
    @Autowired
    MockMvc mockMvc;
    UserDO userDO;
    MultiValueMap<String,String> params;
    @BeforeEach
    public void setUp()throws Exception{
        userDO=new UserDO();
        userDO.setPasswd("123456");
        params=new LinkedMultiValueMap<>();
        params.add("name","codehome");
    }
	//测试get接口
    @Test
   public  void queryUser() throws Exception {
      String result= mockMvc.perform(MockMvcRequestBuilders.get("/user/query")
            .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .params(params)
        ).andExpect(MockMvcResultMatchers.status().is2xxSuccessful())
        .andDo(MockMvcResultHandlers.print())
                .andReturn().getResponse()
                .getContentAsString();
        Assert.assertEquals("调用成功","codehome",result);
    }
	//测试post接口
    @Test
    void addUser() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.post("/user/add")
            .contentType(MediaType.APPLICATION_JSON)
                .content(JsonUtil.toJson(userDO))
                .accept(MediaType.APPLICATION_JSON)
        ).andExpect(MockMvcResultMatchers.status().is2xxSuccessful())
                .andDo(MockMvcResultHandlers.print())
                .andExpect(MockMvcResultMatchers.jsonPath("$.data.passwd").value("123456"));
    }
	//测试cookie
    @Test
    void testCookie()throws Exception{
       String token= mockMvc.perform(MockMvcRequestBuilders.get("/user/cookie")
        .cookie(new Cookie("token","123456")))
                .andDo(MockMvcResultHandlers.print())
                .andReturn().getResponse()
                .getContentAsString();
       Assert.assertEquals("token从cookie中获取成功","123456",token);
    }
}
//测试的接口类
@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping("/query")
    public String queryUser(String name){
        return name;
    }
    @PostMapping("/add")
    public R addUser(@RequestBody UserDO userDO){
        return R.ok(userDO);
    }
    @GetMapping("/cookie")
    public String testCookie(@CookieValue("token") String token){
        return token;
    }
}

Mil milhas começam com um único passo. Este é o sétimo artigo da série de tutoriais do SpringBoot. Todos os códigos-fonte do projeto podem ser baixados no meu GitHub . **

Acho que você gosta

Origin blog.csdn.net/github_35592621/article/details/108248853
Recomendado
Clasificación