使用谷歌测试,我想为一个函数设置期望(或默认行为),该函数提供多个数据作为输出参数,包括一个固定大小的数组,一个指针被传递到该数组。使用
SetArgPointee
设置输出参数不适用于数组,所以我的猜测是定义自定义参数化操作应该有效。我将问题(以及我对解决方案的尝试)简化为:
#include "gtest/gtest.h"
#include "gmock/gmock.h"
class MyInterface {
virtual bool GetFixedSizeArray(unsigned char* msg) = 0;
};
class MYMock : public MyInterface {
public:
MOCK_METHOD1(GetFixedSizeArray, bool(unsigned char* msg));
};
ACTION_P(MyCopyAction, src) { for (int i = 0; i < 6; i++) arg0[i] = src[i]; }
using namespace ::testing;
TEST(Case1, Test1) {
MYMock mock;
unsigned char dummymsg[6] = { 1,2,3,4,5,6 };
ON_CALL(mock, GetFixedSizeArray(_)).WillByDefault(DoAll(
WithArg<1>(MyCopyAction(dummymsg)),
Return(true)));
// ... expectations and
// code under test
}
此版本在 VS2019 Intellisense 中看起来不错,但无法编译并显示消息:
error C2504: 'std::tr1::_Not_nil<std::tr1::_Nil>' : base class undefined
ON_CALL
应该能够接受数组内容的参数,以便它可以在多次调用 GetFixedSizeArray
时改变。我正在使用 MSVC 2010 处理遗留项目,因此使用 googletest 1.1.8 语法。
关于如何做到这一点有什么建议吗?