【发布时间】:2016-05-24 06:45:31
【问题描述】:
我的生产代码(A.cpp)中有这样非常简单的代码行,如下所示:
std::string A::getString(int i) {
return sVect_[i];
}
标题如下:
class A{
public:
std::string getString(int i);
...
private:
vector<std::string> sVect_;
...
};
我一直在尝试使用 googletest 测试 getString() 函数,但不断弹出错误:
error: invalid conversion from 'char* (*)(const char*, int)throw ()' to 'int'
error: initializing argument 1 of 'std::string A::getString(i)'
这是我的测试程序:
TEST(ATest, getString){
A a;
EXPECT_EQ("c", a.getString(i));
}
我无法完全掌握向量字符串的解决方法以及如何在我的测试程序中调用它,而无需更改生产代码。我什至使用hack,添加#define 语句来访问私有成员,但仍然无法访问。
我的测试实际上如何成功调用该函数?
注意:我在 Linux 上使用 gcc。提前谢谢你们。
【问题讨论】:
-
i中的a.getString(i)是什么? -
当我搜索整个 .cpp 时,值“i”被初始化为“int i = -1”,它位于另一个函数中,它将返回 i 的值。在函数中,它最终会是 'i = param[paramI];'在 if 语句之后。我已经使用 main 检查(cout)来找出 i 的当前值,它是'i = 1'。这有什么帮助吗?
-
错误消息听起来好像在某处有某个函数
char* i(const char*, int)。不妨试试a.getString(1),看看会发生什么。 -
谢谢@KarstenKoop ,做
a.getString(1)编译成功,但是运行测试输出时,结果是Segmentation fault。
标签: c++ linux unit-testing googletest