que estoy involucrado con un proyecto que debe, entre otras cosas, el control de varios instrumentos de laboratorio (robots, lectores, etc ...)código Prueba de la unidad con dependencias externas impredecibles
La mayoría de estos instrumentos son controlados ya sea a través Controladores basados en DCOM, el puerto serie o iniciando programas propietarios con varios argumentos. Algunos de estos programas o controladores incluyen el modo de simulación, otros no. Obviamente, mi computadora de desarrollo no se puede conectar a todos los instrumentos, y aunque puedo encender máquinas virtuales para los instrumentos cuyos controladores incluyen un modo de simulación, algunas cosas no se pueden probar sin el instrumento real.
Ahora, mi propio código no es principalmente acerca de las operaciones reales de los instrumentos, sino de iniciar operaciones, asegurándose de que todo está bien, y la sincronización entre la gran cantidad de ellos. Está escrito en Java, utilizando varias bibliotecas para interactuar con los instrumentos y sus controladores.
Quiero escribir pruebas unitarias para los distintos módulos de control de instrumentos. Sin embargo, debido a que los instrumentos pueden fallar de muchas maneras (algunas de las cuales están documentadas, algunas de las cuales no), debido a que el código depende de estas salidas parcialmente aleatorias, estoy un poco perdido con respecto a cómo escribir pruebas unitarias para estas partes de mi código. He considerado las siguientes soluciones:
- única prueba con instrumentos reales conectados, posiblemente el método más preciso, pero no es práctico en absoluto (placa de inserción en lector, marcha de prueba unidad, retire la placa, prueba de la unidad de gestión, etc ...), por no mencionar potencialmente peligrosa,
- utilizar un objeto de burla para simular la parte que realmente se comunica con la cosa; mientras que éste es definitivamente más fácil de implementar (y ejecución), puede que no sea capaz de reproducir toda la gama de posibles fallos (como se mencionó anteriormente, una gran cantidad es indocumentado, que a veces puede causar malas sorpresas)
Mientras Actualmente estoy pensando en ir con este último, ¿me estoy perdiendo algo? ¿Hay una mejor manera de hacer esto?
Pruebas unitarias: ya tengo compilación automática y pruebas unitarias para la mayor parte del proyecto (una gran parte se trata de almacenar/convertir/transmitir de forma segura los datos de los instrumentos). Sin embargo, para probar el código de control de los instrumentos correctamente, es probable que tarden mucho más tiempo en ejecutarse, ya que algunas de las condiciones de error implican tiempos de espera (que, de acuerdo, pueden alcanzar un valor razonable durante la prueba). Pero para la parte de integración, es más difícil, y no se puede automatizar en algunos casos, ya que implica la manipulación física de los instrumentos (por ejemplo, agregar un plato) –