La introducción de tecnologías Mock

1 ¿Cuál es el Mock?

Stackflow explica en la sección tomada:

El imitar utilizado isprimarily en la unidad de pruebas. Un objeto bajo prueba puede tener dependencias onother (complejo) objetos. Para aislar el comportamiento del objeto que desea totest reemplazar los demás objetos de burla que simulan el comportamiento de los objetos thereal. Esto es útil si los objetos reales no son prácticos para incorporateinto la prueba unitaria. 

MOCK se utiliza principalmente en una sola medición, el objeto tiene un complejo puede depender de otros objetos durante la prueba, para simular los simulacros reales por otros objetos (módulos) para reemplazar a los demás objetos que desee ir de prueba (módulo ), si otro objeto (bloque) es difícil despegarse de la unidad de prueba, entonces es útil ... .. traducción artificial probablemente significa bien. Utilice una traducción precisa de la utilización de la traducción fanyi.sogou.com inteligencia artificial :) dura fuerza de ancho.

2 Mock ¿De qué sirve?

De hecho, se ha explicado anteriormente, se burlan de lo que utilizan, con el fin de mejorar la comprensión del lector, vistazo a qué fines Mock. En primer lugar, Mock-dependiente se puede utilizar para levantar el objeto de prueba (tal como una base de datos, una interfaz de terceros, etc.) de un servicio externo, de tal manera que la prueba se puede ejecutar de forma independiente. Ya sea aplicaciones monolíticas tradicionales, o los ahora populares micro-servicios, este punto es particularmente importante debido a la presencia de cualquier dependencias externas serán severamente limitados casos de prueba pueden migrar y estabilidad. medios transferibles que si desea ejecutar la misma prueba en un nuevo entorno de prueba, que pueden funcionar por sí mismo adecuadamente para garantizar que, además de objeto de prueba, sino también para asegurar que todos se basan en servicios externos puede ser llamado correctamente. La estabilidad significa que si el servicio externo no está disponible, entonces la prueba puede fallar. Después de la eliminación de las dependencias externas por Mock, ya sea el caso de prueba puede ser, o la movilidad estabilidad, puede ser un nivel superior.

El segundo beneficio es reemplazar las llamadas de servicio externo Mock, mejorar la velocidad de la prueba. Cualquier invocación de servicio externo es al menos un consumo de nivel entre procesos, incluso a través de los sistemas, el consumo de toda la red, y Mock puede reducir el consumo en el proceso. Una segunda etapa, tal como las solicitudes de red originales, puede reducirse mediante milisegundos Mock, un total de tres órdenes de magnitud de diferencia.

Mock tercer beneficio es aumentar la eficiencia de las pruebas. Aquí que la eficiencia de la prueba tiene dos significados. La primera capa de significado es el número de casos de prueba para ejecutar la unidad de tiempo, lo cual es un beneficio directo para correr más rápido trae. El segundo significado es el número de casos de prueba de una unidad de tiempo probador de la creación. ¿Cómo entender este segundo significado de la misma? aplicación monomérica, por ejemplo, con el aumento de la complejidad del negocio, con el fin de ejecutar un caso de prueba pueden necesitar para preparar una gran cantidad de datos de prueba, datos de prueba, al mismo tiempo también tratar de asegurar que no existan interferencias entre los múltiples casos de prueba. Para ello, los probadores a menudo tienen que pasar mucho tiempo para mantener un conjunto de datos de prueba que se pueden ejecutar. Después Con Mock, debido a la dependencia de la base de datos compartida entre la eliminación de la prueba, el probador puede diseñar un conjunto independiente de datos de prueba para cada una de la o cada conjunto de casos de prueba, por lo que es fácil de hacer entre los diferentes casos de prueba el aislamiento de datos. Para micro-servicios, como un servicio de micro puede depender de muchos otros servicio de micro cascada, ejecutar un caso de prueba incluso necesidad de preparar un conjunto de datos de prueba a través de sistemas, si no Mock, básicamente se puede decir es imposible. Por lo tanto, ya sea sola aplicación o micro-servicios, la llegada de Mock, QE se ahorrará mucho tiempo para preparar los datos de prueba, casos de prueba se centran en sí mismo, naturalmente, mejorar la eficiencia de la prueba única.

3 ¿Cómo Mock?

Mock dijo tantos beneficios, entonces exactamente cómo lo utilizan en la prueba de simulacro? Para diferentes escenarios de prueba, se puede elegir un marco Mock diferente.

3.1 Mockito

Si el objeto de prueba es un método, en particular a un método de funcionamiento de la base de datos, entonces Mockito puede ser la mejor elección. Como el marco más ampliamente utilizado Mock, Mockito para EasyMock y mejor que EasyMock, incluso por defecto integrado en Pruebas de Primavera. El principio que es un objeto dinámico o cada clase de Mock CGLIB generan un objeto proxy en tiempo de ejecución, pre-diseñado resultados de retorno. Mockito integrado pasos básicos son:

1. Marcar la clase o el objeto Mock genera objeto proxy

2. API Mockito para personalizar el comportamiento del objeto proxy

3. Llame al método de objeto proxy, los resultados obtenidos prediseñados

He aquí un ejemplo que fácilmente encontrar en línea,

@RunWith (SpringRunner.class)

@SpringBootTest

publicclassSignonServiceTests {

    // objeto de prueba, una clase de servicio

    @Autowired

    signonService SignonService privado;

    // es la clase Mock servicio de clase depende de una clase DAO

    @MockBean

    SignonDao privada dada;

    @Prueba

    publicvoidtestFindAll () {

        // SignonService # findAll () llamadas internas SignonDao # findAll ()

      // Si no se hace a medida, todas las clases Mock retorno por defecto vacía

       Lista <inicio de sesión> inicios de sesión = signonService.findAll ();

       assertTrue (CollectionUtils.isEmpty (inicios de sesión));

        // devuelve el resultado de la personalización

        Signonsignon = nuevo Signon ();

       signon.setUsername ( "foo");

       cuando (dao.findAll ()) thenReturn (Lists.newArrayList (inicio de sesión).);

 

        inicios de sesión = signonService.findAll ();

        // devuelve los resultados de la verificación de pre-diseñadas y consistentes resultados

       assertEquals (1, signons.size ());

       assertEquals ( "foo", signons.get (0) .getUsername ());

    }

}

Se puede ver en la prueba anterior, la clase de servicio depende Mock clases DAO, podemos omitir todas las operaciones de bases de datos, ningún resultado de retorno personalizados, que se centran en servicios de pruebas de la clase de lógica de negocio interno. Esta es una prueba no Mock tradicional difícil de lograr.

Nota: Mockito no soporta métodos privados o métodos estáticos Mock, Mock si desea que este tipo de método puede ser utilizado PowerMock .

3.2 WireMock

Si cuchillo Mocketo ejército suizo, puede Mock todo, entonces WireMock es servir micro nacido Heavenly Sword. Y los objetos en diferentes capas Mockito, WireMock dirigidas a la API. Supongamos que hay dos micro-servicios, Service-A y Service-B, Service-A en una API (tentativamente llamado API-1), dependiente del Servicio-B, entonces el uso de métodos de ensayo convencionales, las pruebas API-1 cuando se une a usted necesita comenzar Servicio-B. Si WireMock, entonces usted puede confiar en que todo el servicio del API-B-A Servicio Mock terminal, eliminando de este modo la dependencia externa Servicio-B.

También mirar un ejemplo de un pueblo:

@RunWith (SpringRunner.class)

@WebMvcTest (VacationController.class)

publicclassVacationControllerTests {

    // Mock depende de otro micro-servicios

    @Regla

    pública WireMockRule wireMockRule = new WireMockRule (3001);

    @Autowired

    mockMvc MockMvc privado;

    @Autowired

    objectMapper ObjectMapper privado;

    @Antes de

    publicvoidbefore () throwsJsonProcessingException {

        // devuelve el resultado de la personalización

       JsonResult <booleano> esperado = JsonResult.ok (true);

       stubFor (get (urlPathEqualTo ( "/ api / vacaciones / isWeekend"))

               .willReturn (aResponse ()

               .withStatus (OK.value ())

               .withHeader (CONTENT_TYPE, APPLICATION_JSON_UTF8_VALUE)

          .withBody (objectMapper.writeValueAsString (esperado))));

    }

    @Prueba

    publicvoidtestIsWeekendProxy () throws Exception {

        // solicitud de parámetro constructor

       solicitud VacationRequest = nuevo VacationRequest ();

       request.setType (PERSONAL);

       OffsetDateTime lastSunday = OffsetDateTime.now () con (TemporalAdjusters.previous (Domingo)).;

       request.setStart (lastSunday);

       request.setEnd (lastSunday.plusDays (1));

 

       MockHttpServletRequestBuilder constructor = MockMvcRequestBuilders.get ( "/ vacaciones / isWeekend");

       . Request.toMap () forEach ((k, v) -> builder.param (k, v));

       JsonResult <booleano> esperado = JsonResult.ok (true);

       mockMvc.perform (constructor)

           // devuelve los resultados de la verificación de pre-diseñadas y consistentes resultados

              .andExpect (estado (). A veces ())

                                        .andExpect (contenido de (). contentType (APPLICATION_JSON_UTF8))

               .andExpect (. contenido () cadena (objectMapper.writeValueAsString (esperado)));

    }

}

Y Mockito Del mismo modo, los pasos básicos en la prueba WireMock integrado son:

1. Servicios de agencias de declarar como una alternativa al servicio de micro-Mock

2. API WireMock devuelve el resultado de los servicios de agencia personalizados

3. Los servicios de desvío de llamadas, los resultados obtenidos prediseñados

Vale la pena mencionar que, además de la API modo de integración, soportes WireMock ejecutan como un tarro paquete separado, resultado respuesta a la carga prediseñado del archivo de configuración, en lugar de ser micro-servicios Mock. Más información se puede encontrar en la documentación oficial.

Hay OkHttp marco de la API de otros Mock similares mockwebserver , Moco y mockserver . mockwebserver también pertenece a la categoría de marco Mock incrustado, pero demasiado simple. moco, mockserver aunque funcional, sino que requiere un despliegue separada, y WireMock comparación con ninguna ventaja.

 

referencias:

http://www.managershare.com/post/355904

Supongo que te gusta

Origin www.cnblogs.com/wx170119/p/12510663.html
Recomendado
Clasificación