我想模拟一个返回复杂数据类型的方法
class aClass
{
public:
virtual const QMap<QString, QString> aMethod() const;
}
class MockaClass : public aClass
{
public:
MOCK_CONST_METHOD0(aMethod, const QMap<QString, QString>());
}
Run Code Online (Sandbox Code Playgroud)
此代码无法编译:"宏"MOCK_CONST_METHOD0"传递3个参数,但只需2"
我认为googlemock宏不理解QMap并将逗号解释为参数分隔符.
有没有办法告诉googlemock QMap是返回值?
我使用System.currentTimeMillis()来节省用户启动活动的时间.
public class TimeStamp {
protected long _startTimeMillis = System.currentTimeMillis();
public String getStartTime() {
return new Time(_startTimeMillis).toString();
}
Run Code Online (Sandbox Code Playgroud)
在活动开始时实例化类,getStartTime()返回正确的时间.我也试着获得活动开始后经过的时间.
public String getElapsedTime() {
return new Time(System.currentTimeMillis() - _startTimeMillis).toString();
}
Run Code Online (Sandbox Code Playgroud)
这使用模拟的Android设备(android 4.0.3)完美地工作.但是当我在真正的Android设备(android 4.0.3)上部署应用程序时,getElapsedTime()会再开始一小时,然后正常计数.因此,在我的真实设备上,getElapsedTime()将在活动开始后返回"01:00:01",但它应返回"00:00:01".
你知道为什么会这样吗?
我使用 Gmock 进行方法调用,它返回 QList heightsFromCsvResult 的元素作为 out 参数。这是当前工作的代码:
EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_))
.WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(0)), Return(true)))
.WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(1)), Return(true)))
.WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(2)), Return(true)))
.WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(3)), Return(true)));
Run Code Online (Sandbox Code Playgroud)
第一个参数 lineNumber 来自
getGeometryHeightValues(int lineNumber, QPair<QString, QString>)
Run Code Online (Sandbox Code Playgroud)
是 heightsFromCsvResult.at(lineNumber) 的索引。
现在我尝试以更通用的方式使用 Gmock:
int* mockLineNumber = new int;
EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_))
.Times(4)
.WillRepeatedly(DoAll(SaveArg<0>(mockLineNumber), SetArgReferee<1>(heightsFromCsvResult.at(*(mockLineNumber))), Return(true)));
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用,因为mockLineNumber 从来不是由Gmock 编写的。但是 EXPECT_CALL 是满意的。
有没有人看到代码中的问题?