【发布时间】:2020-03-20 19:14:09
【问题描述】:
假设我有一个比较模板类的两个实例的测试:
TEST_F(fooSuite, fooTest) {
U<A> tA;
U<B> tB;
someCheck(tA, tB);
}
我现在想为U 和V 将其转换为Type-Parameterized Test,因为它们实现了相同的接口:
template <class T>
class U { ... }
template <class T>
class V { ... }
直觉上,我想写这样的东西:
template <class TestType>
class fooSuite { };
TYPED_TEST_P(fooSuite, fooTest) {
TypeParam<A> tA;
TypeParam<B> tB;
someCheck(tA, tB);
}
REGISTER_TYPED_TEST_SUITE_P(fooSuite, fooTest);
using TypesToTest = ::testing::Types<U, V>
INSTANTIATE_TYPED_TEST_SUITE_P(fooPrefix, fooSuite, TypesToTest);
当然,这无法编译,因为 U 和 V 在此 using 表达式中需要一个模板参数。
如果没有一个主要的解决方法来创建包装类来传递,这是否可能?
【问题讨论】:
-
你的 U 和 V 不是不完整的类型,它们是模板。我从未使用过类型化测试,但在快速查看文档后,您应该将类型注入测试而不是模板。
-
没错,“不完整的类型”是错误的描述。但是,我不能在没有模板参数的 using 语句中简单地使用
U和V的问题仍然存在。我重新表述了这部分问题。
标签: c++ googletest