【发布时间】:2017-11-09 13:44:50
【问题描述】:
我想用 gmock 验证函数参数。函数参数的struct格式如下:
SomeClass.h:
class SomeClass {
public:
SomeClass();
virtual ~SomeClass();
struct SomeData {
int Value;
int Serie;
};
virtual void getData(SomeData &data);
};
SomeClass.cpp:
#include "../include/SomeClass.h"
SomeClass::SomeClass(){}
SomeClass::~SomeClass(){}
void SomeClass::getData(SomeData &data){
data.Serie = 4;
data.Value = 5;
}
MockSomeClass.h
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "../include/SomeClass.h"
class MockSomeClass: public SomeClass {
public:
MockSomeClass(){};
virtual ~MockSomeClass(){};
SomeData data;
MOCK_METHOD1(getData, void(SomeData &data));
};
testSomeClass:
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "../include/SomeClass.h"
#include "MockSomeClass.h"
using ::testing::_;
using ::testing::AtLeast;
TEST(testSomeMethod, test1){
MockSomeClass mock1;
SomeClass::SomeData data;
EXPECT_CALL(mock1, getData(_)).Times(AtLeast(2));
mock1.getData(data);
mock1.getData(data);
}
TEST(testSomeMethod, test2){
MockSomeClass mock2;
SomeClass::SomeData data;
EXPECT_CALL(mock2, getData(SomeClass::SomeData &data));
mock2.getData(data);
}
当我运行 testSomeClass 时,test1 没有错误,但 test2 却造成了问题。有什么建议如何将 struct 格式的数据包含在 gmock 的函数调用中?
【问题讨论】:
-
test2 is causing trouble是什么意思? -
这是错误信息:/testSomeClass.cpp:28:49: error: expected primary-expression before ‘&’ token EXPECT_CALL(mock2, getData(SomeClass::SomeData &data)); ^ /build/test/gtest/src/gtest/googlemock/include/gmock/gmock-spec-builders.h:1846:20:注意:在宏“GMOCK_EXPECT_CALL_IMPL_”((obj).gmock_##call)的定义中。 InternalExpectedAt(FILE, LINE, #obj, #call) ^ /SomeClass/test/testSomeClass.cpp:28:2: 注意:在宏 'EXPECT_CALL' EXPECT_CALL 的扩展中(mock2, getData(SomeClass::SomeData &data)
-
我正在尝试用 MATCHER 解决这个问题,但到目前为止我还没有成功。一个简单的例子会很棒。
-
我把 data.Serie 和 data.Value 放在了错误的地方(我只是想验证 getData 函数正在接收具有某些值的参数。)使用这个 MATCHER 它似乎可以工作: MATCHER(data1AreEqual, ""){ return arg.Value >= 5 && arg.Serie
标签: c++ struct gmock googlemock