【发布时间】:2015-12-16 22:05:40
【问题描述】:
我通读了Google Mock: Return() a list of values 并了解了如何从每个 EXPECT_CALL 上的向量中返回单个元素,因此我编写了以下有效的代码:
{
testing::InSequence s1;
for (auto anElem:myVecCollection) {
EXPECT_CALL(myMockInstance, execute())
.WillOnce(testing::Return(anElem));
}
}
到目前为止一切顺利... 现在我读到不要使用 EXPECT_CALL ,除非你需要。 https://groups.google.com/forum/#!topic/googlemock/pRyZwyWmrRE 我的用例 myMockInstance 实际上是一个向 SUT(被测软件)提供数据的存根。
但是,简单的 EXPECT_CALL 到 ON_CALL 的替换将不起作用(??),因为带有 WillByDefault 的 ON_CALL 只计算一次返回类型(??)
因此,我尝试设置一个 ACTION。
ACTION_P(IncrementAndReturnPointee, p)
{
return (p)++;
}
ON_CALL(myMockInstance, execute())
.WillByDefault(testing::Return
(*(IncrementAndReturnPointee(myVecCollection.cbegin()))));
Clang给了
error: expected expression 'ACTION_P(IncrementAndReturnPointee, p)'
然后我尝试设置一个仿函数并在其上使用 Invoke 方法。
struct Funct
{
Funct() : i(0){}
myClass mockFunc(std::vector<myClass> &aVecOfMyclass)
{
return aVecOfMyclass[i++];
}
int i;
};
Funct functor;
ON_CALL(myMockInstance, execute())
.WillByDefault(testing::Return(testing::Invoke(&functor, functor.mockFunc(myVecCollection))));
Clang给了
no matching function for call to 'ImplicitCast_'
: value_(::testing::internal::ImplicitCast_<Result>(value)) {}
现在,我对 google-mock 还很陌生,但我已经广泛使用了 google-test。 我对 Google-Mock 文档有点迷茫。我想知道,就我需要的东西而言,我是否走在正确的道路上。 如果你们中的一个人可以指出我,哪种方法是正确的;或者我是否接近正确的方法,我可以从那里开始并进一步调试“接近正确的方法”。 谢谢
【问题讨论】:
标签: c++ unit-testing googlemock