googlemock 期望:将不同的数组内容复制到输出参数

问题描述 投票:0回答:0

使用谷歌测试,我想为一个函数设置期望(或默认行为),该函数提供多个数据作为输出参数,包括一个固定大小的数组,一个指针被传递到该数组。使用

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 语法。

关于如何做到这一点有什么建议吗?

c++ c++11 googletest googlemock
© www.soinside.com 2019 - 2024. All rights reserved.