Zastosowanie tablicę kodowanym (tzw powiedzmy Combination
) do przechowywania danych testowych, a pętla choć każdego wpisu w jednym teście. Sprawdź każdą kombinację przy użyciu EXPECT_EQ
zamiast ASSERT_EQ
, aby test nie został przerwany i można kontynuować sprawdzanie innych kombinacji.
przeciążeniem operator<<
dla Combination
tak, że można wyprowadzać go do ostream
:
ostream& operator<<(ostream& os, const Combination& combo)
{
os << "(" << combo.field1 << ", " << combo.field2 << ")";
return os;
}
przeciążeniem operator==
dla Combination
, dzięki czemu można łatwo porównać dwie kombinacje dla równości:
bool operator==(const Combination& c1, const Combination& c2)
{
return (c1.field1 == c2.field1) && (c1.field2 == c2.field2);
}
I test jednostki może wyglądać mniej więcej tak:
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";
}
Dlaczego nie użyjesz tablicy struktur do przechowywania danych testowych i pętli przez każdy wpis? Możesz mieć tylko jeden przypadek testowy, który testuje wszystkie kombinacje. –
Witaj, Emilu, dzięki za sugestię. Kiedy go wypróbowałem, jeśli jedna z kombinacji nie powiedzie się, przestaje ona działać dalej i nie raportuje poprawnie wskaźnika sukcesu. Pod koniec dnia są to dla mnie różne przypadki testowe. –