2016-10-17 4 views
-1

Ich habe eine andere Gtest wo ich folgendes tun und es funktioniert gut:Gtest Setup Teardown Testumgebung - Ausgabe mit Klassenvariable

TEST(TEST1, TestName) 
{ 
ClassName env; 
const String original = env(Con::WorkingDir); 

Con c = env; 
} 

Allerdings möchte ich dies für eine andere Gtest Klasse eingestellt werden und während des gesamten halten Testvorrichtung. Allerdings erhalte ich diese Fehlermeldung:

Aufruf eines Objekts der Klasse Typ ohne entsprechende Betreiber oder Konvertierungsfunktionen zu Zeiger-to-Funktionstyp.

Ich sehe initialize gtest, und ich bin mir nicht sicher, was ich dafür vermisse. Es könnte die Verwendung von statischen Variablen sein, mit denen ich nicht vertraut bin. Ich möchte jedoch nicht, dass ClassName statisch ist.

Was mache ich falsch damit?

//this is intended to setup env to use in teardown. 
class TestEnvironment : public ::testing::Environment { 
public: 
static String getEn() { 
    ClassName env; 
    static const String sString = env(Con::WorkingDir); //env has the error message here 
    return sString; 
} 
} 

class UnitTest : public ::testing::Test 
{ 
public: 
virtual void SetUp() { 
    // 
} 

virtual void TearDown() { 
    //set env back to initial value 
    getEn(); 
    //process env info; 
} 
+0

Können Sie uns bitte weitere Details über die Klasse 'ClassName' geben. Statement wie 'static const String sString = env (Con :: WorkingDir);' kann kompilieren, wenn 'env' ein Funktionsobjekt ist und die Fehlermeldung suggeriert, dass dies nicht der Fall ist. Ich würde vorschlagen, dass Sie Ihre Frage bearbeiten, indem Sie eine Definition von 'ClassName' hinzufügen. –

+0

Ich habe es funktioniert durch Entfernen der statischen const – Michele

+0

Die Klasse ist kein Funktionsobjekt. Ich habe noch nie davon gehört. – Michele

Antwort

0
class UnitTest : public ::testing::Test { //can't use Environment here because of name conflict in our code, although that was used by static const variable setup in example link. 
public: 
String orig; 
} 

class UnitTest : public ::testing::Test 
{ 
public: 
virtual void SetUp() { 
    orig = code; 
} 

virtual void TearDown() { 
    //process orig; 
} 

Es stellte sich heraus, dass, obwohl unser Code für eine konstante String gesucht, wir es als const nicht speichern müssen.

Verwandte Themen