我有一个类型参数化测试夹具,我想通过类型参数名称过滤我的测试。我们来看看这个例子:
假设我有一个简单的类型参数化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)
{
// ...
}
我想用不同的配置来运行我的测试:
Worker1
ReturnsEvenNumber
测试,仅适用于Worker1
我理解如何为所有类型参数运行单个测试用例(这可以通过--gtest_filter
选项实现)。但我找不到一种方法来只运行一个类型参数的所有测试用例。
我该怎么做?
答案 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]*"