【问题标题】:Unit testing a vector string对向量字符串进行单元测试
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 它在另一个函数中被定义为int i = -1,它会在其中的一些if语句之后返回i,其中我定义的最后一件事是i = param[paramI];。我在 i 的主要价值上做了一个 cout,它输出了一个 i = 1
  • 如果 i 在本地另一个函数中声明,则从 TEST 将不可见。可能您需要先阅读有关变量的本地和全局范围的数据可见性。检查this short tutorial 开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
相关资源
最近更新 更多