GoogleMock SaveArg 用于保存数组?编译器抛出错误,我还没有看到一个好的解决方案
GoogleMock SaveArg for saving array? Compiler throwing errors, and I don't see a good solution yet
首先,我已经在相关的谷歌群组上发了一篇文章,但我不确定它有多活跃。无论如何,这是我的问题:
假设我有一个具有成员 Beta 的 Alpha 类。(具体来说,在构造时注入了指向 Beta 的指针(;Beta 是稍后会模拟的对象。但我们关心的是,确切地说,当 Alpha 从 beta 调用函数时,它会调用什么。
class Gamma{
private:
char array[15];
public:
char* getArray() { return &array[0]; }
}
class Alpha{
private:
Beta* m_beta;
public:
Alpha(Beta* external) : m_beta(external) {}
DoStuff(const Gamma& thing){
// ... maybe do some stuff with Gamma;
Beta->Function(thing.getArray(), 15);
}
};
class Beta{
public:
virtual void Function(const char* array, int sizeOfArray);
};
class MockBeta : public Beta{
MOCK_METHOD2(Function, void(const char*, int));
}
using ::testing::_;
Test(AlphaTest, DoStuffTest){
char expectedArray[15] = {/*whatever*/};
char actualArray[15];
// char* arrayPtr = nullptr;
MockBeta mock_external;
Alpha testObject(&mock_external);
EXPECT_CALL(mock_external, Function(_,_))
.WillOnce(SaveArg<0>(&(&actualArray[0]));
// .WillOnce(SaveArg<0>(&arrayPtr));
}
此示例在编译时抱怨:无法获取类型为"char *"的右值的地址(在行上:.WillOnce(SaveArg<0>(&(&actualArray[0]((;
我尝试了多种方法。
- 带有参数的自定义操作:ACTION_P(SaveToPtr, ptr( { ptr = arg0; } 不起作用,因为 ptr 是自定义操作的常量值。
- 我可以尝试只使用通用字符*而不是数组。但随后它给出了一个编译器错误,它与类型"const char *const"不兼容
可能还有其他东西。
你知道
,在发布问题时,我想我找到了自己的答案。密钥位于DoStuff(const Gamma& thing)
签名中。如果伽玛是常量,那么该函数实际上不能// ... maybe do some stuff with Gamma
。但是,如果Gamma不是常量,那么,如果我们假设Gamma是单元测试的,那么我们调用它的任何非常量函数都应该已经过测试,并且在这种情况下我们知道Gamma::getArray((的结果会是什么。
相关文章:
- 运行同一解决方案的另一个项目的项目
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 对于 ~95% 写入/5% 读取线程安全的无序列图,有没有一个简单的解决方案?
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 单元测试类无法在我要测试的同一解决方案中的另一个项目中找到类
- 只有一个正确解决方案的无限循环
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- VS为我提供了对构造函数的另一个解决方案,但我想知道为什么我的工作不起作用
- C++回文检查解决方案被一个测试用例跳闸
- 正在(在构造函数中)将其包含一个不良设计的指针传递,如果是的,则解决方案是什么
- 在同一解决方案但不同配置的另一个项目中使用一个类
- 为什么“从'x*'到'y'失去精度”是一个硬错误,什么是适合旧版代码的解决方案
- 一个解决方案,两个项目:如何从 Windows 应用程序调用控制台项目?C++
- C++/VS 2012-多项目解决方案:一个项目中存在链接器错误,但另一个项目没有
- 我需要一个非模板解决方案
- C++构建一个带有运算符重载的双边树-什么是好的内存解决方案
- 在一个应用程序中MPI_Scatter和MPI_Bcast解决方案。如何让分区打印分区大小
- Xcode为c++中显式死代码提供了一个奇怪的解决方案
- 制定一个解决方案