Hacemos algo como esto con el fin de ejecutar lo que son en realidad integración (regresión) pruebas dentro de la unittest
marco (en realidad una personalización de la casa de la misma que nos da enormes beneficios como la ejecución de las pruebas en paralelo en un clúster de máquinas, etc., etc. - el gran valor agregado de esa personalización es la razón por la cual estamos tan interesados en utilizar el marco unittest
).
Cada prueba se representa en un archivo (los parámetros a usar en esa prueba, seguidos de los resultados esperados).Nuestra integration_test lee todos esos archivos de un directorio, analiza cada uno de ellos, y luego llama:
def addtestmethod(testcase, uut, testname, parameters, expresults):
def testmethod(self):
results = uut(parameters)
self.assertEqual(expresults, results)
testmethod.__name__ = testname
setattr(testcase, testname, testmethod)
Empezamos con una clase de caso de prueba vacío:
class IntegrationTest(unittest.TestCase): pass
y luego llamar a addtestmethod(IntegrationTest, ...
en un bucle en que estamos leyendo todos los archivos relevantes y analizándolos para obtener el nombre de prueba, los parámetros y las expresiones.
Finalmente, llamamos a nuestro propio corredor de prueba especializada que hace el trabajo pesado (distribución de las pruebas sobre las máquinas disponibles en un clúster, la recogida de resultados, etc.). No queríamos reinventar esa rueda de alto valor agregado, así que estamos haciendo un caso de prueba tan cercano al típico "codificado a mano" como se necesita para "engañar" al corredor de pruebas para que funcione correctamente para nosotros;)
A menos que tenga razones específicas (buenos corredores de prueba o similares) para usar el enfoque unittest
para sus pruebas (de integración), puede encontrar que su vida es más simple con un enfoque diferente. Sin embargo, este es bastante viable y estamos muy contentos con sus resultados (que en su mayoría incluyen ejecuciones increíblemente rápidas de grandes conjuntos de pruebas de integración/regresión).
Para aclarar su pregunta, ¿se refiere a algo así como a los proveedores de datos en PHPUnit? http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers – majelbstoat