utilizzare un array di struct (chiamato, per esempio, Combination
) per tenere i vostri dati di test e ciclo se ogni voce in un singolo test. Controlla ciascuna combinazione utilizzando EXPECT_EQ
anziché ASSERT_EQ
in modo che il test non venga interrotto e puoi continuare a controllare altre combinazioni.
sovraccarico operator<<
per un Combination
in modo che sia in grado di produrre a un ostream
:
ostream& operator<<(ostream& os, const Combination& combo)
{
os << "(" << combo.field1 << ", " << combo.field2 << ")";
return os;
}
sovraccarico operator==
per un Combination
in modo da poter facilmente confrontare due combinazioni per l'uguaglianza:
bool operator==(const Combination& c1, const Combination& c2)
{
return (c1.field1 == c2.field1) && (c1.field2 == c2.field2);
}
E il test unitario potrebbe assomigliare a questo:
TEST(myTestCase, myTestName)
{
int failureCount = 0;
for (each index i in expectedComboTable)
{
Combination expected = expectedComboTable[i];
Combination actual = generateCombination(i);
EXPECT_EQ(expected, actual);
failureCount += (expected == actual) ? 0 : 1;
}
ASSERT_EQ(0, failureCount) << "some combinations failed";
}
fonte
2012-11-04 12:23:34
Perché non si utilizza una matrice di strutture per contenere i dati di test e si esegue il ciclo di ciascuna voce? Potresti avere un solo test case che verifica tutte le combinazioni. –
Ciao Emile, grazie per il suggerimento. Quando l'ho provato, se una combinazione fallisce, impedisce al caso di procedere ulteriormente e non riporta correttamente il tasso di successo. Alla fine della giornata, questi sono diversi casi di test per me. –