GoogleTest: How to skip a test?
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. This is better than commenting out the code or using#if 0
, as disabled tests are still compiled (and thus won't rot).
Example from the above documentation:
// 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) { ... }
If you have access to more recent versions of Google Test (the current version is v1.12.1), check out the GTEST_SKIP()
macro suggested by jslmsca in the comments and Peter Bloomfield in another answer. From the sample in advanced.md:
TEST(SkipTest, DoesSkip) { GTEST_SKIP() << "Skipping single test"; EXPECT_EQ(0, 1); // Won't fail; it won't be executed } class SkipFixture : public ::testing::Test { protected: void SetUp() override { GTEST_SKIP() << "Skipping all tests for this fixture"; } }; // Tests for SkipFixture won't be executed. TEST_F(SkipFixture, SkipsOneTest) { EXPECT_EQ(5, 7); // Won't fail }
You can also run a subset of tests, according to the documentation:
Running a Subset of the Tests
By default, a Google Test program runs all tests the user has defined. Sometimes, you want to run only a subset of the tests (e.g. for debugging or quickly verifying a change). If you set the GTEST_FILTER environment variable or the --gtest_filter flag to a filter string, Google Test will only run the tests whose full names (in the form of TestCaseName.TestName) match the filter.
The format of a filter is a ':'-separated list of wildcard patterns (called the positive patterns) optionally followed by a '-' and another ':'-separated pattern list (called the negative patterns). A test matches the filter if and only if it matches any of the positive patterns but does not match any of the negative patterns.
A pattern may contain '*' (matches any string) or '?' (matches any single character). For convenience, the filter '*-NegativePatterns' can be also written as '-NegativePatterns'.
For example:
./foo_test Has no flag, and thus runs all its tests. ./foo_test --gtest_filter=* Also runs everything, due to the single match-everything * value. ./foo_test --gtest_filter=FooTest.* Runs everything in test case FooTest. ./foo_test --gtest_filter=*Null*:*Constructor* Runs any test whose full name contains either "Null" or "Constructor". ./foo_test --gtest_filter=-*DeathTest.* Runs all non-death tests. ./foo_test --gtest_filter=FooTest.*-FooTest.Bar Runs everything in test case FooTest except FooTest.Bar.
Not the prettiest solution, but it works.