Domanda

desidero estendere dinamicamente la mia CxxTest Suite con elementi di prova supplementari, ma sto trovando che tutti i scenerios test devono essere disponibili (hard-coded) al momento della compilazione.

Il mio scenario è che ho un piuttosto ingombrante di classe C ++ che ha 20 + metodi da testare. Questa classe ha bisogno di essere testati per oltre 40 set di dati diversi. Questi insiemi di dati sono ottenuti tramite il costruttore classe, controllato tramite parametri.

Il mio obiettivo primario è quello di evitare riscrivere gli stessi 20 casi di test per i diversi set di dati. Vorrei utilizzare un file di controllo che contiene l'elenco di insiemi di dati, e basta creare diversi apparecchi per la stessa suite di test.

Q1) come si fa in modo dinamico (in fase di esecuzione) aggiungere ulteriori test per la suite di test?

Q2) Può una aggiungere dinamicamente infissi in fase di esecuzione? C'è una migliore suite di test che permette di infissi dinamici?

Q3) E 'questo qualcosa che gli evita tecnica TDD? Chiunque ha un buon riassunto della tecnica TDD.

Grazie,

- J Jorgenson -

È stato utile?

Soluzione

Ci non è davvero alcun modo diretto per farlo. Il numero di test è determinato prima del tempo di compilazione, quando si esegue cxxtestgen. Esso analizza i file e trova i nomi dei metodi che iniziano con test. Si trova anche discendenti TestSuite e genera il codice per creare un'istanza di ciascuno di essi una volta. È possibile scrivere una funzione createSuite su ciascuna delle vostre suite di test per passare i parametri al costruttore della suite, ma si sta ancora limitato a restituire un solo oggetto.

Si potrebbe modificare la configurazione di build per richiamare il programma di test 40 volte diverse, passando un parametro diverso sulla riga di comando ogni volta. La ruga in tale piano è che il main di default generato da CxxTest non accetta i parametri della riga di comando. Avrete bisogno di fornire la propria implementazione che i parametri di assegni e richiama quindi il normale test runner dopo. Qualcosa di simile a questo:

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
}

Per utilizzare questa funzione, omettere l'opzione --error-printer quando si esegue cxxtestgen, aggiungere <CxxTest world> alla fine del file, e l'uso l'opzione --template per generare il vostro programma di test .

Ma fintanto che si sta scrivendo il proprio main, si potrebbe provare il parsing del file di dati-impostati anche lì, e poi invocare il test runner più volte. Qualcosa di simile a questo:

int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top