Una gran parte de esta masa de pruebas es para las implementaciones de la colección Guava. Han escrito pruebas genéricas que prueban exhaustivamente las interfaces de recopilación, y esto genera un conjunto por implementación. Véase, por ejemplo, clases llamadas CollectionAddAllTester
, ListIndexOfTester
.
Todo esto está respaldado por una biblioteca llamada testlib, que se envía como parte de Guava. Esto es bastante genérico. Admite escribir pruebas genéricas para cualquier interfaz (no solo colecciones). Puede especificar Feature
s de posibles implementaciones y probarlas (por ejemplo, si su conjunto no se puede modificar, espera un resultado diferente set.add()
), y cuando ejecuta las pruebas, especifica qué características admite su implementación.
Se basa en JUnit 3, no en 4. Normalmente, tiene una clase que se extiende TestCase
llena de métodos nombrados testSomething()
, y JUnit los ejecuta reflexivamente. La biblioteca testlib se conecta a la ejecución de estas pruebas para que el ciclo de vida se vea así:
- Para cada implementación que desee probar
- Para cada método de prueba (aplicable)
- Crea la
TestCase
instancia
- Inicialice
TestSubjectGenerator
: esta es la interfaz testlib que extiende donde realmente crea el sujeto de prueba
- Ejecute reflexivamente el método de prueba. Durante este método,
getSubjectGenerator()
da acceso al sujeto de prueba
El bit clave es el paso de inicialización adicional que les permite inyectar un sujeto de prueba específico en el caso de prueba genérico.
Yo escribí un post sobre cómo escribir TestLib suites de generación de sus propias interfaces.
(También publicado en la misma pregunta en el sitio sqa ).