我想用gmock验证函数参数。函数参数采用结构格式,如下所示:
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进行函数调用?
发布于 2020-07-24 13:12:41
在编写googlemock期望时:
EXPECT_CALL(someMock, someMethod(arg1, arg2, arg3, ...))...;唯一允许的参数(arg1、arg2、arg3)是matchers ::testing::Matcher<T1> -其中T1是someMethod参数类型。幸运的是,Matcher<T1>值可以从T1值构造。
因此-这是不可能使用SomeClass::SomeData &data -因为这是一些参数声明-而不是匹配值。
您可能希望使用类似于::testing::Ref的matcher:
EXPECT_CALL(mock2, getData(Ref(data)));https://stackoverflow.com/questions/47203467
复制相似问题