小编Jen*_*ich的帖子

googlemock - 模拟返回复杂数据类型的方法

我想模拟一个返回复杂数据类型的方法

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是返回值?

c++ googletest googlemock

7
推荐指数
1
解决办法
2646
查看次数

android - System.currentTimeMillis()无法按预期工作

我使用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".

你知道为什么会这样吗?

java android

6
推荐指数
1
解决办法
1万
查看次数

将方法参数传递给 googlemock 中的操作

我使用 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 是满意的。

有没有人看到代码中的问题?

c++ googletest googlemock

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×2

googlemock ×2

googletest ×2

android ×1

java ×1