Search code examples
c++unit-testingexceptiongoogletest

Test a specific exception type is thrown AND the exception has the right properties


I want to test that MyException is thrown in a certain case. EXPECT_THROW is good here. But I also want to check the exception has a specific state e.g e.msg() == "Cucumber overflow".

How is this best implemented in GTest?


Solution

  • I mostly second Lilshieste's answer but would add that you also should verify that the wrong exception type is not thrown:

    #include <stdexcept>
    #include "gtest/gtest.h"
    
    struct foo
    {
        int bar(int i) {
            if (i > 100) {
                throw std::out_of_range("Out of range");
            }
            return i;
        }
    };
    
    TEST(foo_test,out_of_range)
    {
        foo f;
        try {
            f.bar(111);
            FAIL() << "Expected std::out_of_range";
        }
        catch(std::out_of_range const & err) {
            EXPECT_EQ(err.what(),std::string("Out of range"));
        }
        catch(...) {
            FAIL() << "Expected std::out_of_range";
        }
    }
    
    int main(int argc, char **argv) {
      ::testing::InitGoogleTest(&argc, argv);
      return RUN_ALL_TESTS();
    }