Estoy trabajando con el siguiente sistema:
Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern
Recientemente tuvimos un problema en el que actualicé la versión de la biblioteca que estaba usando, lo que, entre otras cosas, causó que las marcas de tiempo (que la biblioteca de terceros devuelve long
) cambien de milisegundos después de la época a nanosegundos después de la época.
El problema:
Si escribo pruebas que se burlan de los objetos de la biblioteca de terceros, mi prueba será incorrecta si he cometido un error sobre los objetos de la biblioteca de terceros. Por ejemplo, no me di cuenta de que las marcas de tiempo cambiaron la precisión, lo que resultó en la necesidad de un cambio en la prueba de la unidad, porque mi simulación devolvió los datos incorrectos. Esto no es un error en la biblioteca , sucedió porque me perdí algo en la documentación.
El problema es que no puedo estar seguro acerca de los datos contenidos en estas estructuras de datos porque no puedo generar los reales sin una fuente de datos real. Estos objetos son grandes y complicados y tienen muchos datos diferentes. La documentación para la biblioteca de terceros es deficiente.
La pregunta:
¿Cómo puedo configurar mis pruebas para probar este comportamiento? No estoy seguro de poder resolver este problema en una prueba unitaria, porque la prueba en sí misma puede ser incorrecta. Además, el sistema integrado es grande y complicado y es fácil perderse algo. Por ejemplo, en la situación anterior, había ajustado correctamente el manejo de la marca de tiempo en varios lugares, pero me perdí uno de ellos. El sistema parecía estar haciendo principalmente las cosas correctas en mi prueba de integración, pero cuando lo implementé en producción (que tiene muchos más datos), el problema se hizo evidente.
No tengo un proceso para mis pruebas de integración en este momento. La prueba es esencialmente: trate de mantener las pruebas unitarias buenas, agregue más pruebas cuando las cosas se rompan, luego implemente en mi servidor de prueba y asegúrese de que las cosas parezcan sensatas, luego implemente en producción. Este problema de marca de tiempo pasó las pruebas unitarias porque los simulacros se crearon incorrectamente, luego pasó la prueba de integración porque no causó ningún problema obvio e inmediato. No tengo un departamento de control de calidad.
Timestamp
clase (que contiene cualquier representación que quieren) y proporcionar métodos llamados ( .seconds()
, .milliseconds()
, .microseconds()
, .nanoseconds()
) y de constructores supuesto con nombre. Entonces no habría habido problemas.