2016-05-24 2 views
-1

У меня есть это действительно простой строки кода в моем продакшн-кода (a.cpp) следующим образом:Модульное тестирование вектор строка

std::string A::getString(int i) { 
    return sVect_[i]; 
} 

с заголовком следующим образом:

class A{ 
public: 
    std::string getString(int i); 
    ... 
private: 
    vector<std::string> sVect_; 
    ... 
}; 

I «ве пытается проверить функцию GetString() с помощью googletest но ошибка продолжает выкатились:

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. Спасибо заранее, ребята.

+4

что такое '' i' в a.getString (I) ' ? –

+0

Когда я просматривал весь .cpp, значение 'i' инициализируется как 'int i = -1', и оно находится в другой функции, где оно возвращает значение i. В функции это будет в конечном итоге «i = param [paramI];» после утверждения if. Я проверил (cout) с помощью основного, чтобы узнать текущее значение i, и это «i = 1». Это какая-то помощь? –

+0

Сообщение об ошибке заставляет это звучать, как будто есть некоторая функция 'char * i (const char *, int)' где-то. Возможно, попробуйте вместо 'a.getString (1)' и посмотрим, что произойдет. –

ответ

1

Возможно, сообщение об ошибке вводит в заблуждение. Вы определили i глобально в другом месте? Для меня это выглядит как в локальной области, поскольку он не знает, что значение переменной i есть, она плохо себя неожиданным образом

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

Он определен в другой функции как 'int i = -1', и он будет возвращать' i' после некоторых операторов if внутри него, где определена последняя вещь i здесь: 'i = param [paramI];'. Я сделал cout по основному значению i, и он выводит 'i = 1' –

+0

Если' i' объявлено внутри другой функции локально, оно не будет видно из 'TEST'. Возможно, вам нужно сначала прочитать информацию о видимости данных в локальной и глобальной области переменных. Проверьте [этот короткий учебник] (http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm) для начала. – jazaman