单元测试矢量字符串

时间:2016-05-24 06:45:32

标签: c++ linux unit-testing googletest

我的生产代码(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。提前谢谢你们。

1 个答案:

答案 0 :(得分:1)

错误信息可能具有误导性。您是否已在其他地方全球定义i?对我而言,它看起来像在本地范围内,因为它不知道变量i的值是什么,它是以意想不到的方式行为不端

TEST(ATest, getString){
    A a;
    EXPECT_EQ("c", a.getString(i)); //here what is the 'i' and where is it defined
}