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