【发布时间】:2016-08-17 19:38:31
【问题描述】:
请考虑以下代码示例
NodeInterface * pPreNode = NULL;
NodeInterface * pChild = NULL;
for (uint16_t Index = 0; Index < Children.size(); ++Index)
{
pChild = Children[Index];
if (pPreNode == NULL)
{
pChild->SetPrevious(pChild);
pChild->SetNext(pChild);
}
else
{
pChild->SetNext(pPreNode->GetNext());
pChild->SetPrevious(pPreNode);
pPreNode->GetNext()->SetPrevious(pChild);
pPreNode->SetNext(pChild);
}
pPreNode = pChild;
}
要测试这条线,如何准确设置模拟?
Children 是节点的 vector,我们正在传递 Mocked 对象。
EXPECT_CALL(Obj, GetNode()).WillOnce(Invoke(this, &GetANewNode));
GetANewNode 将提供新的 MockedNode
MockedNode * GetANewNode()
{
MockedNode * pMockedNode = new MockedNode();
return pMockedNode;
}
如何为每个Next()、Previous() 调用提供准确的节点?
EXPECT_CALL(*pMockedNode, SetNext(_));
EXPECT_CALL(*pMockedNode, SetPrevious(_));
EXPECT_CALL(*pMockedNode, GetNext());
EXPECT_CALL(*pMockedNode, GetPrevious());
【问题讨论】:
标签: c++ unit-testing googletest googlemock gmock