Tengo varias clases que comparten algunas invariantes y tienen una interfaz común, y me gustaría ejecutar automáticamente la misma prueba para cada una de ellas.¿Cómo ejecutar el mismo caso de prueba para diferentes clases?
Como ejemplo, supongamos que tengo varias clases que implementan diferentes enfoques para particionar un conjunto de datos. La invariante común aquí sería que, para todas estas clases, la unión sobre todas las particiones debería ser igual al conjunto de datos original.
Lo que tengo actualmente es como la siguiente:
class PartitionerInvariantsTests(unittest.TestCase):
def setUp(self):
self.testDataSet = range(100) # create test-data-set
def impl(self, partitioner):
self.assertEqual(self.testDataSet,
chain.from_iterable(partitioner(self.testDataSet))
Luego añadir una función diferente que llama impl
para cada una de las clases que quiero probar con una instancia de esa clase. El problema con esto se hace evidente al hacer esto para más de una función de prueba. Supongamos que tengo 5 funciones de prueba y 5 clases que quiero probar. Esto haría 25 funciones que parecen casi idénticas para invocar todas las pruebas.
Otro enfoque en el que estaba pensando era implementar la plantilla como una superclase, y luego crear una subclase para cada una de las clases que quiero probar. Las subclases podrían proporcionar una función para crear instancias de la clase. El problema con eso es que el cargador de prueba predeterminado consideraría la clase base (inutilizable) como un caso de prueba válido y trataría de ejecutarlo, lo cual fallaría.
¿Cuáles son sus sugerencias?
P.S .: Estoy usando Python 2.6
¿Intenta ejecutar la clase base si no hereda de 'unittest.TestCase'? – nmichaels
@Nathon: Ahora que lo dices, todavía no lo he intentado. –
@Nathon, si desea publicar su idea como respuesta, con gusto eliminaré la mía. – unutbu