GoogleTest: How to skip a test?

前端 未结 8 922
情歌与酒
情歌与酒 2020-12-04 08:09

Using Google Test 1.6 (Windows 7, Visual Studio C++). How can I turn off a given test? (aka how can I prevent a test from running). Is there anything I can do besides comm

相关标签:
8条回答
  • 2020-12-04 09:04

    I had the same need for conditional tests, and I figured out a good workaround. I defined a macro TEST_C that works like a TEST_F macro, but it has a third parameter, which is a boolean expression, evaluated runtime in main.cpp BEFORE the tests are started. Tests that evaluate false are not executed. The macro is ugly, but it look like:

    #pragma once
    extern std::map<std::string, std::function<bool()> >* m_conditionalTests;
    #define TEST_C(test_fixture, test_name, test_condition)\
    class test_fixture##_##test_name##_ConditionClass\
    {\
        public:\
        test_fixture##_##test_name##_ConditionClass()\
        {\
            std::string name = std::string(#test_fixture) + "." + std::string(#test_name);\
            if (m_conditionalTests==NULL) {\
                m_conditionalTests = new std::map<std::string, std::function<bool()> >();\
            }\
            m_conditionalTests->insert(std::make_pair(name, []()\
            {\
                DeviceInfo device = Connection::Instance()->GetDeviceInfo();\
                return test_condition;\
            }));\
        }\
    } test_fixture##_##test_name##_ConditionInstance;\
    TEST_F(test_fixture, test_name)
    

    Additionally, in your main.cpp, you need this loop to exclude the tests that evaluate false:

    // identify tests that cannot run on this device
    std::string excludeTests;
    for (const auto& exclusion : *m_conditionalTests)
    {
        bool run = exclusion.second();
        if (!run)
        {
            excludeTests += ":" + exclusion.first;
        }
    }
    
    // add the exclusion list to gtest
    std::string str = ::testing::GTEST_FLAG(filter);
    ::testing::GTEST_FLAG(filter) = str + ":-" + excludeTests;
    
    // run all tests
    int result = RUN_ALL_TESTS();
    
    0 讨论(0)
  • 2020-12-04 09:10

    The docs for Google Test 1.7 suggest:

    "If you have a broken test that you cannot fix right away, you can add the DISABLED_ prefix to its name. This will exclude it from execution."

    Examples:

    // Tests that Foo does Abc.
    TEST(FooTest, DISABLED_DoesAbc) { ... }
    
    class DISABLED_BarTest : public ::testing::Test { ... };
    
    // Tests that Bar does Xyz.
    TEST_F(DISABLED_BarTest, DoesXyz) { ... }
    
    0 讨论(0)
提交回复
热议问题