¿Cómo hacer las pruebas unitarias cuando se tienepruebas unitarias con las dependencias entre las pruebas
- alguna unidad general, pone a prueba
- pruebas más sofisticadas comprobación casos extremos, dependiendo de las generales
Para dar un ejemplo, imagine probar un CSV-reader (me acaba de inventar una notación para la demostración),
def test_readCsv(): ...
@dependsOn(test_readCsv)
def test_readCsv_duplicateColumnName(): ...
@dependsOn(test_readCsv)
def test_readCsv_unicodeColumnName(): ...
Espero que las pruebas secundarias se ejecuten solo si la prueba principal tiene éxito. La razón detrás de esto es que ejecutar estas pruebas lleva tiempo. Muchos informes de fallas que se remontan a una sola razón tampoco serían informativos. Por supuesto, podría calzar todos los casos extremos en la prueba principal, pero me pregunto si hay una forma más estructurada de hacerlo.
he descubierto que son relacionados, pero diferentes preguntas,
- How to structure unit tests that have dependencies?
- Unit Testing - Is it bad form to have unit test calling other unit tests
ACTUALIZACIÓN:
que he encontrado TestNG que tiene un gran soporte integrado para dependencias de prueba. Puede escribir pruebas de este tipo,
@Test{dependsOnMethods = ("test_readCsv"))
public void test_readCsv_duplicateColumnName() {
...
}
Sí, PERO: si algo falla y causa una cascada de fallas, no se garantiza que los mensajes de error se corrijan en el orden correcto para solucionarlos (especialmente si hacer cualquier descubrimiento automático de pruebas). Por ejemplo, tenemos un conjunto de pruebas unitarias que verifican si un entorno web está configurado correctamente, lo que (entre otras cosas) es útil para los nuevos empleados. Si te falta el archivo X y ese archivo está enlazado en 3 lugares, primero quieres arreglar el archivo que falta. Eso puede no ser obvio para un novato y, por lo tanto, disminuye la utilidad del conjunto de pruebas. –
Hay algunos escenarios en los que se necesitan * dependencias * entre pruebas. Por ejemplo: probar un contenedor de API que inicia sesión en un servidor externo. Esa sesión de inicio de sesión tendría que ser compartida entre las pruebas. –