Domanda

Vorrei specificare l'ordine di testare in CppUnit. Secondo la mia ricerca, l'ordine di prova dipende sia il compilatore o linker e come sono venuti attraverso i file.

Come si fa a specificare le dipendenze in CppUnit?

Ad esempio, consideriamo una classe rettangolo che ha quattro linee. Ciascuna riga contiene due classi punti. Si supponga che ogni classe è in un'unità di modulo o di traduzione a parte.

struct Point
{
  int x;
  int y;
};

struct Line
{
  Point a;
  Point b;
};

struct Rectangle
{
  Line top;
  Line left;
  Line right;
  Line bottom;
};

Nel codice precedente, la classe Point deve essere testato prima, allora la classe Line e infine la classe Rectangle. Non v'è alcun motivo per testare la classe Rectangle se le classi di linea o un punto hanno problemi. Questo è un esempio molto semplificato.

Per le classi di composti, le classi interne o classi di tipo di dati dell'utente devono essere prima prova.

Supponiamo che ogni classe ha una classe di test associato. Ogni classe di test ha i propri metodi di prova pubblicati (che sono registrati alla lista CppUnit), in file separati. La classe per linee di collaudo non è a conoscenza della classe di prova per punti; e simili per il rettangolo. Quando queste classi test case vengono compilati, il loro ordine dipende dal compilatore e linker.

Quindi, come si fa a condannare i casi di test?

FYI, sto usando CppUnit, wxTestRunner e Visual Studio 2008

È stato utile?

Soluzione

Quello che stai cercando di fare non è realmente unit testing. "Pure" unit test destinato a verificare singole unità (singole classi), utilizzando mock o oggetti falsi al posto delle dipendenze reali; una volta dipendenze sei classi di test a vicenda, che è in test di integrazione, non unit testing.

Con quella dichiarazione di non responsabilità di mezzo ...

Sembra che si potrebbe essere in grado di utilizzare CPPUNIT_TEST_SUITE_NAMED_REGISTRATION per creare più suite quindi eseguire ogni suite in ordine, solo se hanno superato tutte le suite precedenti, ma potrebbe essere necessario incidere su o sostituire wxTestRunner prova corridore per fare questo.

La Pagina di CppUnit su Creazione TestSuite ha altre opzioni per la registrazione di suite di test; CPPUNIT_REGISTRY_ADD , ad esempio, consente di creare una gerarchia di suite, che dovrebbe dare un certo controllo su l'ordinamento, ma non vedo alcun modo per un guasto in una suite per annullare le prove successive.

Infine, proprio come un suggerimento, CppUnit non è probabilmente il miglior framework di test C ++ unità in questi giorni. Personalmente sono un fan di Google prova , ma Boost.Test e unittest ++ sono anche buoni. ( questa risposta introduce un progetto personale chiamato Saru che suona come potrebbe dare la flessibilità che si desidera di test di ordinazione.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top