我想用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引起了麻烦。有什么建议如何将结构格式的数据包括到gmock函数调用中?
最佳答案
在编写googlemock期望时:
EXPECT_CALL(someMock, someMethod(arg1, arg2, arg3, ...))...;
唯一允许的参数(arg1,arg2,arg3)是匹配器-::testing::Matcher<T1>
-其中T1
是someMethod参数类型。幸运的是,可以从Matcher<T1>
值构造T1
值。所以-不能使用
SomeClass::SomeData &data
-因为这是一些参数声明-而不是匹配器值。您可能想使用
::testing::Ref
匹配器-如:EXPECT_CALL(mock2, getData(Ref(data)));
关于c++ - 用结构数据模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47203467/