Soy nuevo en las pruebas unitarias, tengo un método web REST que solo llama a DB y completa un DTO. El pseudo código es
public object GetCustomer(int id)
{
CustomerDTO objCust = //get from DB
return objCust;
}
Mi duda es cómo escribir pruebas para estos métodos y tipo de pruebas (Integración / Unidad) que se incluirán. Y para las pruebas unitarias, ¿necesita golpear el DB? Si lo fuera, y paso una identificación de cliente y hago pocas afirmaciones, los datos podrían cambiar eventualmente resultando en fallas.
Creo que me falta algo aquí para entender estos conceptos.
testing
unit-testing
rest
integration-tests
Soleado
fuente
fuente
Respuestas:
Durante las pruebas unitarias, no se espera que realice pruebas con una base de datos, o al menos, no con una base de datos que no haya preparado para las pruebas unitarias. Las pruebas con una base de datos y, como tal, probar diferentes capas de su aplicación al mismo tiempo generalmente se consideran pruebas de integración . Con las pruebas unitarias, se supone que debe probar solo lo que hace su método, lo que devuelve dependiendo de los diferentes parámetros y cuándo (o no) debería fallar.
Es muy esperado que en su método realice llamadas a métodos X desde otras clases. No estás probando estos métodos X , así que lo que tienes que hacer es burlarte de estos métodos.
Supongo que está escribiendo su código en Java, en ese caso tiene excelentes marcos de burla como Mockito que pueden serle útiles. Independientemente de si usa o no un marco de imitación es su elección, solo diré que le ahorrarán mucho tiempo y el que mencioné al menos no es realmente complicado.
Si solo quieres escribir tu propio simulacro para experimentar, entonces supongamos que tienes la siguiente
CustomerRepository
clase:Puede escribir su propia
CustomerRepository
clase burlada y sucia de la siguiente manera:Luego, en su caso de prueba, básicamente reemplaza su instancia "estándar"
CustomerRepository
con una instancia simulada que le permitirá probar su método para varios resultados degetCustomer
:En general, cada método de prueba debe probar una sola cosa, esto ayuda a mantener sus pruebas pequeñas y enfocadas en una tarea.
Voy a repetirlo :-) Escribir una clase burlada completa lleva un tiempo como ves. Considere usar un marco burlón, cuanto menos se escriba código, menos errores se cometen , ¿verdad? Burlarse de un método que arroja una excepción o devuelve un valor dado para un parámetro dado es pan comido y toma 2 o 3 líneas (con mockito al menos)
Espero que ayude a probar su método REST.
fuente