En las últimas semanas, he estado reflexionando e investigando cómo llenar un vacío en nuestra metodología de prueba. En términos simplificados, las pruebas unitarias son demasiado pequeñas y las pruebas de integración tradicionales son demasiado grandes.
Un escenario frecuente surge donde Ay Bambos usan componentes C. Sin embargo, Ay Btienen requisitos ligeramente diferentes para, y hacer suposiciones ligeramente diferentes sobre C. Si soy el desarrollador de Acómo y dónde pruebo mis suposiciones C?
Obviamente, las pruebas unitarias Acon supuestos simulados Cson buenas para realizar pruebas Ade forma aislada, pero no prueba las suposiciones en sí mismas.
Otra posibilidad es agregar pruebas unitarias para C. Sin embargo, esto no es ideal porque, mientras Aestá en desarrollo, alterar las pruebas Ccon suposiciones en evolución Aserá excesivamente torpe. De hecho, Ael desarrollador puede no tener acceso adecuado a las pruebas unitarias de C(por ejemplo, una biblioteca externa).
Para enmarcar esto con un ejemplo más concreto: suponga que se trata de una aplicación de nodo. A, y Bdependerá Cde leer un archivo (entre otras cosas) y almacenar el contenido del archivo en el objeto pasado C. Al principio, todos los archivos que Cmaneja son pequeños y se pueden leer sincrónicamente sin un bloqueo significativo. Sin embargo, el desarrollador se Bda cuenta de que sus archivos se están volviendo enormes y necesita cambiar Ca una lectura asíncrona. Esto da como resultado un error de sincronización esporádica A, que todavía se supone que Cestá leyendo los archivos sincrónicamente.
Este es el tipo de error que es notoriamente difícil de rastrear desde pruebas de integración completas, y puede no quedar atrapado en las pruebas de integración. Tampoco queda atrapado por Alas pruebas de la unidad s porque las Asuposiciones s se burlan. Sin embargo, podría ser fácilmente atrapado por una "mini" prueba de integración que ejerce de manera justa Ay C.
Solo he encontrado algunas referencias a este tipo de pruebas. Integración en el intestino , pruebas de integración de componentes , Unidad de Integración de pruebas. También se relaciona algo con la dirección de prueba de BDD en lugar de la prueba de unidad formal de TDD.
¿Cómo lleno este vacío de prueba? Específicamente, ¿dónde pongo tales pruebas? ¿Cómo me burlo de las entradas Ay Cpara las pruebas de integración "mini"? ¿Y cuánto esfuerzo se debe poner en separar las preocupaciones de las pruebas entre estas pruebas y las pruebas unitarias? ¿O hay una mejor manera de llenar el vacío de prueba?