2016-05-24 6 views
-1

ich diese wirklich einfache Code-Zeile haben in meiner Produktionscode (A.cpp) wie folgt:Unit-Tests eine Vektor-String

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

mit dem Header wie folgt:

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

I habe versucht, die getString() Funktion googletest zu testen, aber ein Fehler taucht immer wieder aus:

error: invalid conversion from 'char* (*)(const char*, int)throw()' to 'int' 
error: initializing argument 1 of 'std::string A::getString(i)' 

Das war mein Testprogramm:

TEST(ATest, getString){ 
    A a; 
    EXPECT_EQ("c", a.getString(i)); 
} 

ich nicht ganz die Abhilfe der Vektorkette erfassen konnte und wie es in meinem Test-Programm aufrufen, ohne jemals die Produktion Code zu ändern. Ich benutze sogar die hack, fügen #define-Anweisungen, um auf das private Mitglied zugreifen, aber immer noch nicht tun.

Wie sieht mein Test tatsächlich aus, um diese Funktion erfolgreich aufzurufen?

Hinweis: Ich bin auf Linux und mit gcc. Vielen Dank im Voraus Jungs.

+4

was 'I' in 'a.getString (i)' ? –

+0

Während ich die gesamte CPP durchsucht habe, wird der Wert 'i' als 'int i = -1' initialisiert und in einer anderen Funktion wird der Wert von i zurückgegeben. In der Funktion wird es schließlich 'i = param [paramI]; nach einer if-Anweisung. Ich habe überprüft (cout) mit dem Haupt, um den aktuellen Wert von i herauszufinden, und es ist "i = 1". Ist das hilfreich? –

+0

Die Fehlermeldung macht es so, als ob irgendwo eine Funktion 'char * i (const char *, int)' steht. Vielleicht versuchen Sie stattdessen mit 'a.getString (1)' und sehen was passiert. –

Antwort

1

Vielleicht ist die Fehlermeldung irreführend. Haben Sie i weltweit woanders definiert? Für mich sieht es aus wie im lokalen Bereich, weil sie nicht weiß, was der Wert der Variablen i wird, ist es auf unerwartete Weise wird misbehaving

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

Es ist in einer anderen Funktion definiert als 'int i = -1' und es wird 'i' nach einigen if-Anweisungen zurückgeben, wo das letzte, was ich definiert habe, hier ist als 'i = param [paramI]; '. Ich habe einen Cout an einem Hauptwert von i gemacht und es gibt ein 'i = 1' aus. –

+0

Wenn 'i' in einer anderen Funktion lokal deklariert wird, ist es nicht von' TEST' sichtbar. Möglicherweise müssen Sie zuerst den lokalen und globalen Gültigkeitsbereich der Variablen lesen. Überprüfen Sie [dieses kurze Tutorial] (http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm) für den Start. – jazaman