按类型参数

时间:2018-04-03 18:18:31

标签: c++ googletest

我有一个类型参数化测试夹具,我想通过类型参数名称过滤我的测试。我们来看看这个例子:

假设我有一个简单的类型参数化GTest测试夹具,如下所示:

template <typename T>
class TestWorkers : public Test {
public:
    ~TestWorkers()
    {
        // Tear down
    }
};

我想测试许多具有类似界面的 worker

struct Worker1 {
    int do_work() {
        return 42;
    }
};

struct Worker2 {
    int do_work() {
        return -42;
    }
};

我的工人也有一堆测试:

typedef Types<Worker1, Worker2> TestTypes;

TYPED_TEST_CASE(TestWorkers, TestTypes);

TYPED_TEST(TestWorkers, ReturnsEvenNumber)
{
    // ...
}

TYPED_TEST(TestWorkers, ReturnsAlwaysTheSameNumber)
{
    // ...
}

我想用不同的配置来运行我的测试:

  1. 运行所有测试
  2. 仅针对Worker1
  3. 运行所有测试
  4. 仅运行ReturnsEvenNumber测试,仅适用于Worker1
  5. 我理解如何为所有类型参数运行单个测试用例(这可以通过--gtest_filter选项实现)。但我找不到一种方法来只运行一个类型参数的所有测试用例。

    我该怎么做?

1 个答案:

答案 0 :(得分:0)

目前看起来GTest中没有这样的能力。我实现了默认TYPED_TEST(...)宏的simple extensions,它将参数名称添加到完整的测试名称。

现在我可以使用TYPED_TEST_EXTNAME(...)宏代替默认值:

TYPED_TEST(TestWorkers, ReturnsEvenNumber) { /* ... */ }
TYPED_TEST(TestWorkers, ReturnsAlwaysTheSameNumber) { /* ... */ }

所有测试的列表将是下一个:

$ ./tests --gtest_list_tests
TestWorkers/0.  # TypeParam = Worker1
  ReturnsEvenNumber[Worker1]
  ReturnsAlwaysTheSameNumber[Worker1]
TestWorkers/1.  # TypeParam = Worker2
  ReturnsEvenNumber[Worker2]
  ReturnsAlwaysTheSameNumber[Worker2]

在这里,我可以通过参数名称轻松过滤测试:

./tests --gtest_filter="*[Worker1]*"