En SpringMVC, los casos de prueba general están probando la capa de servicio. Hoy demostraré cómo usar SpringMVC Mock para probar directamente el código de la capa del controlador.
1. ¿Qué son las pruebas simuladas?
La prueba simulada es un método de prueba que utiliza un objeto virtual para crear para probar ciertos objetos que no son fáciles de construir u obtener durante el proceso de prueba.
2. ¿Por qué usar la prueba simulada?
Las pruebas con el objeto simulado se usan principalmente para simular herramientas que no son fáciles de construir en aplicaciones (como httpservletrequest deben construirse en contenedores de servlet) o objetos relativamente complejos (como los objetos de resultsset en JDBC) para que la prueba vaya sin problemas.
3. Anotaciones comunes
RunWith (SpringJunit4ClassRunner.Class): significa usar componentes de prueba de resorte para pruebas unitarias;
WebAppConfiguration: el uso de esta anotación habilitará un servicio web al ejecutar pruebas unitarias, y luego comenzará a llamar a la API REST del controlador y luego detendrá el servicio web después de que se complete la prueba unitaria;
ContextConfiguration: hay muchas formas de especificar la información del archivo de configuración del bean. Este ejemplo usa el formulario de ruta de archivo. Si hay múltiples archivos de configuración, la información en los soportes se puede configurar como una matriz de cadenas para representarla;
4. Instale el entorno de prueba
El marco de prueba de Spring MVC proporciona dos maneras: instalar e integrar las pruebas de entorno web independientemente (este método no integra el entorno web real, pero simula y prueba a través de la API simulada correspondiente sin iniciar el servidor).
Método de prueba de instalación independiente
Mockmvcbuilders.standalonesetup (objeto ... controladores): especifique un conjunto de controladores a través de parámetros, para que no necesite obtenerlo del contexto;
Hay dos pasos principales:
(1) Primero cree el controlador correspondiente usted mismo e inyecte las dependencias correspondientes
(2) Simule un entorno de prueba MVC a través de MockMVCBuilders.StandalonesEtup, y obtenga un MOCKMVC a través de la compilación
El código es el siguiente:
paquete com.xfs.test; import org.junit.assert; import org.junit.before; import org.junit.test; import org.springframework.test.web.servlet.mockmvc; import og.springFrameWork.test.web.servlet.request.mockmvcrequests; import; org.springframework.test.web.servlet.result.mockmvcresulthandlers; import org.springframework.test.web.servlet.result.mockmvcResultMatchers; import org.springframework.test.web.servlet.setup.mockmvcbuilders; import com.alibaba.fastjson.json; import com.alibaba.fastjson.jsonObject; import com.xfs.web.controller.apiController;/** * Test de instalación independiente Método SpringMvc Mock Test * * @Author Admin * * 10:39:49 AM el 23 de noviembre de 2017 */Public Class Testapione {private Mockmvc Mockmvc; @Bebore public void setup () {apicOntroller apiController = new ApiController (); mockmvc = mockmvcbuilders.standalonesetup (apicontroller) .build (); } @Test public void testgetSequence () {try {mvcresult mvcresult = mockmvc.perform (mockmvCrequestBuilders.post ("/api/getSequence")). .andreturn (); int status = mvcresult.getResponse (). getStatus (); System.out.println ("Código de estado de solicitud:" + estado); String result = mvcresult.getResponse (). GetContentString (); System.out.println ("La interfaz devuelve el resultado:" + resultado); JsonObject dulteBj = json.parseObject (resultado); // Determinar si el campo de éxito en la interfaz regresa a JSON es verdadero afirmar. } catch (Exception e) {E.PrintStackTrace (); }}}El resultado de la solicitud es el siguiente:
Entorno web integrado
Mockmvcbuilders.webAppContextSetup (contexto webapplicationContext): especifique WebApplicationContext, y el controlador correspondiente se obtendrá del contexto y se obtendrá el MOCKMVC correspondiente;
Hay tres pasos principales:
(1) @WebAppConfiguration: se usa en el entorno de prueba, lo que significa que la aplicación de aplicación utilizada en el entorno de prueba será de tipo WebApplicationContext; El valor especifica la raíz de la aplicación web;
(2) a través de @aUtowired WebApplicationContext WAC: Contenedor de ApplicationContext inyectado en el entorno web
(3) Luego cree un MOCKMVC a través de MockMVCBuilders.WebAppContextSetup (WAC) .Build () para probar
El código es el siguiente:
paquete com.xfs.test; import org.junit.assert; import org.junit.before; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.springframe.mock.web.mockhmock org.springframework.test.context.contextConfiguration; import org.springframework.test.context.junit4.Abstractjunit4springContextTests; importar org.springframework.test.context.web.webappconfiguration; importar; org.springframework.test.web.servlet.mockmvc; import org.springframework.test.web.servlet.request.mockmvcrequestBuilders; importar org.springframework.test.web.servlet.resulto.mockmvcresulthandlers; importar org.springframework.test.web.servlet.result.mockmvcresultMatchers; import org.springframework.test.web.servlet.setup.mockmvcbuilders; import og.springFrame.web.webontex com.alibaba.fastjson.JSONObject;/** * Integrated Web Environment Method springmvc mock test* * @author admin * * November 23, 2017 at 11:12:43 am */@RunWith(JUnit4ClassRunner.class)@WebAppConfiguration@ContextConfiguration(locations = { "classpath*:spring/*.xml" })public class TestApiTwo extiende AbstractJunit4SpringContextTests {@aUtowired WebApplicationContext WAC; Public MockMVC MockMVC; Sesión pública de Mockhttpsession; @Bebore public void antes () lanza la excepción {mockmvc = mockmvcbuilders.webappContextSetup (wac) .Build (); } @Test public void testgetSequence () {try {mvcresult mvcresult = mockmvc.perform (mockmvCrequestBuilders.post ("/api/getSequence")). .andreturn (); int status = mvcresult.getResponse (). getStatus (); System.out.println ("Código de estado de solicitud:" + estado); String result = mvcresult.getResponse (). GetContentString (); System.out.println ("La interfaz devuelve el resultado:" + resultado); JsonObject dulteBj = json.parseObject (resultado); // Determinar si el campo de éxito en la interfaz devuelve JSON es verdadero afirmar. } catch (Exception e) {E.PrintStackTrace (); }}}Los resultados de la ejecución son los mismos que los de la prueba independiente anterior.
Resumir:
Todo el proceso:
1. Mockmvc.perform ejecuta una solicitud;
2. MOCKMVCREQUESTBUILDERS.GET ("/USER/1") Construye una solicitud
3. Resultations.AndExpect agrega afirmaciones después de la ejecución
4. Results. anddo agrega un procesador de resultados para indicar qué hacer con el resultado. Por ejemplo, use mockmvcresulthandlers.print () para generar toda la información del resultado de la respuesta.
5. Resultations.andreturn significa que el resultado correspondiente se devuelve después de que se completa la ejecución.
Todo el proceso de prueba es muy regular:
1. Prepárese para el entorno de prueba
2. Ejecutar solicitudes a través de MOCKMVC
3. Agregar afirmación de verificación
4. Agregue un procesador de resultados
5. Obtenga MVCresult para afirmaciones personalizadas/realice la próxima solicitud asíncrona
6. Desinstalar el entorno de prueba
Referencia: Spring-MVC-Test-Framework
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.