Vous pouvez améliorer Google Test en utilisant un custom event listener. Vous pouvez définir votre propre classe d'auditeur et l'ont suivi le nombre de fois qu'un EXPECT_*()
appel échoue par test:
class ExpectListener : public ::testing::EmptyTestEventListener {
int nFailures;
// Called before a test starts.
virtual void OnTestStart(const ::testing::TestInfo& test_info) {
nFailures = 0;
printf("*** Test %s.%s starting.\n",
test_info.test_case_name(),
test_info.name());
}
// Called after a failed assertion or a SUCCEED() invocation.
virtual void OnTestPartResult(const ::testing::TestPartResult& test_part_result) {
if (test_part_result.nonfatally_failed()) {nFailures++;}
printf("%s in %s:%d\n%s\n",
test_part_result.failed() ? "*** Failure" : "Success",
test_part_result.file_name(),
test_part_result.line_number(),
test_part_result.summary());
}
// Called after a test ends.
virtual void OnTestEnd(const ::testing::TestInfo& test_info) {
printf("*** Test %s.%s ending with %d failures.\n",
test_info.test_case_name(),
test_info.name(),
nFailures);
}
};
Maintenant, il suffit de remplacer l'auditeur par défaut de Google Test avec cet écouteur personnalisé:
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners();
delete listeners.Release(listeners.default_result_printer());
listeners.Append(new ExpectListener);
return RUN_ALL_TESTS();
}
Vous ne besoin de mettre en place une fois (en main()
); tous les tests suivront ensuite le nombre de défaillances non fatales qu'ils ont subies. Bien sûr, vous pouvez personnaliser davantage cet écouteur si vous souhaitez modifier les messages de test ou suivre plus d'informations.
N'est-ce pas l'arrêt après la première panne? Nwm, c'est la famille de macros 'ASSERT_ *' qui arrête les tests tôt. En fait, selon les docs, chaque appel attendu ajoutera un nouveau message d'échec lorsque la condition est fausse. – VTT
Expect permet au test de continuer plutôt que de l'arrêter dans ses pistes. Dans mon cas, je génère environ 200 000 'foo's et environ 50 d'entre eux échouent. C'est trop de compter facilement en les regardant à l'œil nu. Je voudrais un message à la fin disant "X échecs EXPECT" ou quelque chose comme ça –