假设我有一个接口 iface
及其几个实现 A
和 B
. 现在,类 A
和 B
的对象是通过读取某些文件来构造的 f1,f2,...,fm.
也就是说,有 m
个对象,如果考虑2个实现类 A
和 B
,则总共有 2m
个对象 . 现在,https://github.com/abseil/googletest/blob/master/googletest/docs/advanced.md#how-to-write-value-parameterized-tests是一个很好的起点,可以自动执行将文件名 f1,...,fm
提供给构造函数的步骤 . 然后只需使用 INSTANTIATE_TEST_CASE_P(MyGroup, BarTest, testing::Values(<some-way-of-getting-filenames>))
. 另一方面,有一个Typed-Test概念:on能够提供不同的接口实现,就像这样
typedef Types<A,B> impls;
INSTANTIATE_TYPED_TEST_CASE_P(MyName, // Instance name
FooTest, // Test case name
impls); // Type list
这里, FooTest
被定义为
template<class T>
class FooTest : public ::testing::Test {
//...
}
再次根据https://github.com/abseil/googletest/blob/master/googletest/samples/sample6_unittest.cc的文档/样本,而 BarTest
定义为
class BarTest : public ::testing::Test, public ::testing::TestWithParam<const char*>
现在我可以看到我需要的是 INSTANTIATE_TEST_CASE_P
和 INSTANTIATE_TYPED_TEST_CASE_P
的组合,来自 testing::Test, TestWithParam
的类 FooBarTest
,还有一个模板参数 T
. 问题是,这可能吗?有这样的宏吗?