No SpringMVC, os casos de teste geral estão testando a camada de serviço. Hoje vou demonstrar como usar o Springmvc Mock para testar diretamente o código da camada do controlador.
1. O que é o teste simulado?
O teste simulado é um método de teste que usa um objeto virtual para criar para testes para determinados objetos que não são fáceis de construir ou obter durante o processo de teste.
2. Por que usar o teste simulado?
O teste com objeto simulado é usado principalmente para simular ferramentas que não são fáceis de construir em aplicações (como HttpServletRequest, devem ser construídas em contêineres de servlet) ou objetos relativamente complexos (como objetos de conjunto de resultados no JDBC), a fim de que o teste corra bem.
3. Anotações comuns
Runwith (springjunit4classrunner.class): significa usar componentes de teste de mola para teste de unidade;
WebAppConfiguration: Usando esta anotação ativará um serviço da Web ao executar testes de unidade e começar a chamar a API REST do controlador e, em seguida, interromper o serviço da Web após a conclusão do teste da unidade;
ContextConfiguration: Existem muitas maneiras de especificar as informações do arquivo de configuração do feijão. Este exemplo usa o formulário do caminho do arquivo. Se houver vários arquivos de configuração, as informações entre colchetes podem ser configuradas como uma matriz de string para representá -la;
4. Instale o ambiente de teste
A estrutura de teste MVC da primavera fornece duas maneiras: instalando e integrando independentemente os testes de ambiente da web (esse método não integra o ambiente da Web real, mas simula e testes através da API simulada correspondente sem iniciar o servidor).
Método de teste de instalação independente
MOGKMVCBUILDERS.STANDALONESETUP (Objeto ... Controladores): Especifique um conjunto de controladores através de parâmetros, para que você não precise obtê -lo do contexto;
Existem duas etapas principais:
(1) Primeiro, crie você mesmo o controlador correspondente e injete as dependências correspondentes
(2) simular um ambiente de teste MVC através do MockMVCBuilders.StandaloneSeTup e obtenha um MockMVC através da construção
O código é o seguinte:
pacote com.xfs.test; importar org.junit.assert; importar org.junit.be antes; importar org.junit.test; importar org.springframework.test.web.servlet.mockmvc; import org.springframework.test.BeB.Servlet.Requimmvc; importação; org.springframework.test.web.servlet.result.mockmvcresultHandlers; importar org.springframework.test.web.servlet.result.mockmvcrestletmatchers; importrg.springFramework.testilding.ServletLet.ServletLets com.alibaba.fastjson.json; import com.alibaba.fastjson.jsonObject; importar com.xfs.web.controller.apicontroller;/** * Método de instalação independente Springmvc Mock Test * * @author admin * 10:39:49 AMM MOGO 23, 2017 * @Before public void setup () {apicontroller apicontroller = new Apicontroller (); MOGKMVC = MOGKMVCBUILDERS.STANDALONESETUP (apicontroller) .build (); } @Test public void testGetSequence () {try {mvcresult mvcresult = zockmvc.perform (zockmvcRequestBuilders.post ("/api/getSequence") .Anddo (MockMvCresultMatchers.status (). int status = mvcresult.getResponse (). getStatus (); System.out.println ("Código de status da solicitação:" + status); String resultado = mvcresult.getResponse (). GetContentasstring (); System.out.println ("interface retorna o resultado:" + resultado); JsonObject resultObj = json.parseObject (resultado); // Determine se o campo de sucesso na interface retorna ao json é verdadeiro assert.assertTrue (resultObj.getBooleanValue ("sucesso")); } catch (Exceção e) {e.printStackTrace (); }}}O resultado da solicitação é o seguinte:
Ambiente integrado da web
MockMVCBuilders.WebAppContextSetup (contexto da WebApplicationContext): Especifique o WebApplicationContext, e o controlador correspondente será obtido do contexto e o MockMVC correspondente será obtido;
Existem três etapas principais:
(1) @WebAppConfiguration: Usado no ambiente de teste, o que significa que o ApplicationContext usado no ambiente de teste será do tipo WebApplicationContext; valor especifica a raiz do aplicativo da web;
(2) Através de @Autowired WebApplicationContext WAC: ApplicationContext Container injetado no ambiente da web
(3) Em seguida, crie um MockMVC através do MockMVCBuilders.WebAppContextSetup (WAC) .Build () para teste
O código é o seguinte:
pacote com.xfs.test; importar org.junit.assert; importar org.junit.be antes; importar org.junit.test; importar org.junit.runner.runwith; importação org.springframework.beans.factory.annotation.aTowired; import.TringFramework.BeanS.Factory.AnoTation.aTowired; org.springframework.test.context.contextConfiguration; importar org.springframework.test.context.junit4.abstractjunit4springcontextTests; importação org.springframework.test.context.web.webappcuration; org.springframework.test.web.servlet.mockmvc; importar org.springframework.test.web.servlet.request.mockmvcrequestbuilders; import org.springframework.web.thers org.springframework.test.web.servlet.result.mockmvcresultmatchers; importar org.springframework.test.web.servlet.setup.mockmvcbuilders; importância org.springframework.web..Contet.weBelds; com.alibaba.fastjson.jsonObject;/** * Método integrado do ambiente da web springmvc Teste simulado * * @Author Admin * * 23 de novembro de 2017 às 11:12:43 */@runwith (Junit4classrunner.class)@webconfiguration@contextconfiguration (locations = {" Resumojunit4springContextTests {@AUTOWIRED Public WebApplicationContext WAC; public mockmvc mockmvc; sessão pública de mockhttpsession; @Before Public void Antes () lança Exceção {MOGKMVC = MOGKMVCBUILDERS.WebAppContextSetup (wac) .build (); } @Test public void testGetSequence () {try {mvcresult mvcresult = zockmvc.perform (zockmvcRequestBuilders.post ("/api/getSequence") .Anddo (MockMvCresultMatchers.status (). int status = mvcresult.getResponse (). getStatus (); System.out.println ("Código de status da solicitação:" + status); String resultado = mvcresult.getResponse (). GetContentasstring (); System.out.println ("interface retorna o resultado:" + resultado); JsonObject resultObj = json.parseObject (resultado); // Determine se o campo de sucesso na interface retorna JSON é verdadeiro assert.assertTrue (ResultObj.getBooleanValue ("Sucesso")); } catch (Exceção e) {e.printStackTrace (); }}}Os resultados da execução são os mesmos do teste independente acima.
Resumir:
Todo o processo:
1. Mockmvc.perform executa uma solicitação;
2. MockmvcRequestBuilders.get ("/user/1") constrói uma solicitação
3. ResultActions.andexpete adiciona afirmações após a execução
4. ResultActions.anddo adiciona um processador de resultado para indicar o que fazer com o resultado. Por exemplo, use o MockMVCRESUTHandlers.print () para produzir todas as informações do resultado da resposta.
5. ResultActions.Andrenn significa que o resultado correspondente é retornado após a conclusão da execução.
Todo o processo de teste é muito regular:
1. Prepare -se para o ambiente de teste
2. Execute solicitações através do MockMVC
3. Adicione a afirmação de verificação
4. Adicione um processador de resultado
5. Obtenha mvcresult para asserções personalizadas/faça o próximo pedido assíncrono
6. Desinstale o ambiente de teste
Referência: Spring-MVC-Test-Framework
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.