Pregunta

Deseo extender mi dinámicamente CxxTest suite con elementos de prueba adicionales, pero estoy encontrando que todas las pruebas de los scenerios deben estar disponibles (no modificable) en tiempo de compilación.

Mi escenario es que tengo una clase bastante voluminosos C ++ que tiene más de 20 métodos para ensayar. Esta clase tiene que ser probado por más de 40 conjuntos de datos diferentes. Estos conjuntos de datos se obtienen a través del constructor de clase, controlado a través de parámetros.

Mi objetivo principal es evitar la re-escritura de los mismos 20 casos de prueba para los diferentes conjuntos de datos. Me gustaría utilizar un archivo de control que contiene la lista de conjuntos de datos, y acaba de crear diferentes accesorios para la misma serie de pruebas.

Q1) ¿Cómo se puede dinámicamente (en tiempo de ejecución) agregar más pruebas a la suite de pruebas?

Q2) ¿Se puede agregar de forma dinámica en tiempo de ejecución accesorios? ¿Hay una mejor paquete de evaluación que permita accesorios dinámicos?

Q3) ¿Esto es algo que los evita técnica TDD? Alguien tiene un buen resumen de la técnica TDD.

Gracias,

- J Jorgenson -

¿Fue útil?

Solución

En realidad no hay ninguna forma directa de hacerlo. El número de pruebas se determina antes del tiempo de compilación, al ejecutar cxxtestgen. Analiza los archivos y encuentra a nombre de los métodos a partir de test. También encuentra descendientes TestSuite y genera código para crear una instancia para cada vez. Puede escribir una función createSuite en cada uno de sus conjuntos de pruebas para pasar parámetros al constructor de la suite, pero todavía está limitado a devolver un solo objeto.

Se podría modificar la configuración de su construcción para invocar el programa de prueba 40 veces diferentes, pasando un parámetro diferente en la línea de comandos cada vez. La arruga en ese plan es que el main predeterminado generado por CxxTest no acepta parámetros de línea de comandos. Usted tendrá que proporcionar su propia implementación que los parámetros de cheques e invoca al corredor de prueba normal después. Algo como esto:

std::string global_var; // check this in your test cases
int main(int argc, char* argv[]) { // add parameter list
  global_var = argv[1]; // read parameter list
  return CxxTest::ErrorPrinter().run(); // standard CxxTest
}

Para utilizar esta función, omita la opción --error-printer cuando se ejecuta cxxtestgen, añadir <CxxTest world> al final del archivo, y el uso la opción --template para generar el programa de pruebas .

Pero mientras usted está escribiendo su propia main, es posible que trate analizar el archivo de conjunto de datos allí, también, y luego invocar el corredor de prueba varias veces. Algo como esto:

int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top