[英]Create gmock tests for template specialization methods
我想添加 GMOCK 测试来验证容器是否访问了正确的方法。 对于vector
它应该访问第二种方法,对于set
它应该访问第一种方法(因为set
有set.find
)。 这是我的模板专业化:
namespace tools{
struct low_priority {};
struct high_priority : low_priority {};
template<class TSource, class Ty>
auto exists_in(high_priority, const TSource &source, const Ty &item)
-> decltype(source->find(item) != source.end())
{
return source.find(item) != source.end();
}
template<class TSource, class Ty>
auto exists_in(low_priority, const TSource &source, const Ty &item)
{
return std::find(source.begin(), source.end(), item) != source.end();
}
template<class TSource, class Ty>
auto exists_in(const TSource &source, const Ty &item)
{
return exists_in(high_priority{}, source, item);
}
}
您不能使用来自自由函数或模板方法的模拟。
在这种情况下,您可以做的是创建一个自定义结构并检查是否调用了operator<
(对于std::set::find
)或operator==
(对于std::find
)。
或者,您可以为std::set
创建模拟类型并检查是否调用了find
方法。
我以另一种方式对向量进行了此操作,但它不起作用,我如何正确检查是否调用了该方法?
struct Interface
{
virtual ~Interface() = default;
virtual bool exists_in(std::vector<int>, int) = 0;
};
struct Implementation : Interface
{
bool exists_in(std::vector<int> v, int i) override { tools::exists_in(v, i); }
};
class MockClass : public Interface {
public:
MOCK_METHOD(bool, exists_in, (std::vector<int>, int));
};
**ADDED NEW**
TYPED_TEST_SUITE_P(ExistsInTestMethod);
TYPED_TEST_P(ExistsInTestMethod, ExistsInMethod)
{
TypeParam Container = InitVectorContainer<TypeParam>();
MockClass mock;
EXPECT_CALL(mock, exists_in(Container, 5));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.