Improve diagnostics of failed BlockSpecial operator tests (#781978)
Deliberately breaking one of the operator<() tests produces less than ideal diagnostics because it doesn't print the BlockSpecial objects being compared. $ ./test_BlockSpecial ... [ RUN ] BlockSpecialTest.OperatorLessThanTwoEmptyObjects test_BlockSpecial.cc:362: Failure Value of: bs1 < bs2 Actual: true Expected: false [ FAILED ] BlockSpecialTest.OperatorLessThanTwoEmptyObjects (1 ms) ... This could be solved by using the Google Test Binary Comparison assertions, however in the tests for false from (bs1 == bs2) and (bs1 < bs2) comparisons then operators != and >= would have to be implemented and the tests changed from: EXPECT_FALSE( bs1 < bs2 ); to: EXPECT_GE( bs1, bs2 ); This makes the meaning of the test less than clear. The primary purpose of the test is to check operator<(), but it is expecting the first BlockSpecial object to be GE (greater than or equal to) than the second, which is calling operator>=() which in turn is testing operator<(). For tests of the operators themselves using Google Test Binary Comparison assertions obscures what is being tested too much. Instead provide a custom failure message which prints the BlockSpecial objects failing the comparison, leaving the test still directly calling the operator being tested, like this: EXPECT_FALSE( bs1 < bs2 ) << " Where: bs1 = " << bs1 << "\n" << " And: bs2 = " << bs2; And with a suitable macro this is simplified to: EXPECT_FALSE( bs1 < bs2 ) << ON_FAILURE_WHERE( bs1, bs2 ); Now the above deliberately broken test produces this output: $ ./test_BlockSpecial ... [ RUN ] BlockSpecialTest.OperatorLessThanTwoEmptyObjects test_BlockSpecial.cc:369: Failure Value of: bs1 < bs2 Actual: true Expected: false Where: bs1 = BlockSpecial{"",0,0} And: bs2 = BlockSpecial{"",0,0} [ FAILED ] BlockSpecialTest.OperatorLessThanTwoEmptyObjects (0 ms) ... Bug 781978 - Add Google Test C++ test framework
parent
003d1b54
Please register or sign in to comment