Qwe*_*wer 3 c++ unit-testing googlemock gmock
我想对以下功能进行单元测试:
void
MyClass::add(const Shape& shape)
{
std::unique_ptr< Line> line;
if (m_DataBase.getLine(shape->getId(), line).ok())
{
addEntry(line->getDimensions());
}
}
Run Code Online (Sandbox Code Playgroud)
为此,我需要模拟 DataBase 类的 getLine 函数:
class DataBase
{
public:
virtual Result getLine(const ShapeId& shapeId, const std::unique_ptr< Line >& line) = 0;
...
}
Run Code Online (Sandbox Code Playgroud)
数据库类模拟:
class DataBaseMock
{
public:
MOCK_METHOD2(getLine, Result(const ShapeId& shapeId, const std::unique_ptr< Line >& line));
...
};
Run Code Online (Sandbox Code Playgroud)
MyClass::add 函数测试如下:
MyClassTest::MyClassTest{
DataBaseMock m_DataBaseMock;
std::unique_ptr< MyClass> m_MyClass;
}
void MyClassTest::setUp(){
m_MyClass = std::unique_ptr< MyClass >(new MyClass(m_DataBaseMock));
}
void MyClassTest::Test_Add()
{
Shape shape;
std::unique_ptr <Line> line = std::unique_ptr <Line> (new Line());
EXPECT_CALL(m_DataBaseMock, getLine(_,_)).WillOnce(DoAll(SetArgReferee< 1 >(line), Return(Result::OK);
CPPUNIT_ASSERT_NO_THROW(m_MyClass->add(shape));
}
Run Code Online (Sandbox Code Playgroud)
当 getLine 函数将 shared_ptr 作为参数时,上述代码有效,但在 unique_ptr 的情况下,EXPECT_CALL 行会出现以下错误:
error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Line; _Dp = std::default_delete<Line>]'
EXPECT_CALL(m_DataBaseMock, getLine(_,_)).WillOnce(DoAll(SetArgReferee< 1 >(line), Return(Result::OK);
Run Code Online (Sandbox Code Playgroud)
解决方案包括一个技巧,即将getLine()方法委托给一个callGetLine()不接受仅移动std::unique_ptr参数的模拟方法(让我们称之为):
MOCK_METHOD2(callGetLine, Result(const ShapeId& shapeId, Line* line));
Result getLine(const ShapeId& shapeId, const std::unique_ptr< Line >& line) {
return callGetLine(shapeId, line.get());
}
Run Code Online (Sandbox Code Playgroud)
请注意,无需callGetLine()在基类中定义或声明。您只需要MOCK_METHOD在模拟类中将其定义为 a 即可。
现在您对callGetLine()方法设置期望。
EXPECT_CALL(m_DataBaseMock, callGetLine(_,NotNull()).WillOnce(Return(Result::OK));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |