2016-06-29 17 views
1

ich diesen Fehler in einer C++ Datei, wo ich einige Tests schreibe:Fang-Test-Framework Problem: nicht fangen können :: Session()

error: no member named 'Session' in namespace 'Catch' 
     testResult = Catch::Session().run(test_argc, test_argv); 
        ~~~~~~~^ 

Mit Blick auf die catch.hpp einzelne Header-Datei, bemerkte ich, dass der Code, der die Session() -Mitgliedfunktion implementieren sollte, ausgegraut ist, wahrscheinlich wegen eines #ifdef irgendwo, das ich nicht finden kann.

Gibt es ein Makro für die Verwendung der Session-Klasse?

Fangversionen: 1.5.3 und 1.5.6.

Referenz: https://github.com/philsquared/Catch/blob/master/docs/own-main.md

+2

verpflichtender Gesundheitscheck: Sie * definieren * CATCH_CONFIG_RUNNER, bevor Sie '# include' catch.hpp, richtig? – jaggedSpire

+0

@jaggedSpire - Ja, nur einmal, in der Datei, in der ich main() definiere, wo ich die Tests nicht schreibe. – Pietro

+0

und der Kompilierungsfehler ist in der Datei, in der Sie main() definieren, richtig? – jaggedSpire

Antwort

1

Sie versuchen, den Konstruktor von Catch::Session aus einer Datei zu nennen, wo Sie nicht Ihre eigenen main definieren, auszuführen. Nach den documentation on defining your own main wird angeblich nur eine Instanz von Catch::Session sein:

Catch::Session session; // There must be exactly once instance 

Es ist wahrscheinlich, Fang Bau von Catch::Session in Übersetzungseinheiten verhindert, wo es nicht in einer benutzerdefinierten main Definition verwendet werden kann (denn das ist, wo es soll verwendet werden), um genau den Fehler zu vermeiden, den Sie beim Kompilieren gemacht haben.

+0

und was, wenn ich Tests mehrmals pro Anwendung ausführen möchte, mit verschiedenen Argc, wie kann man das tun, ohne nur eine Instanz zu verwenden, die Argumente zu halten scheint. –

+0

klingt wie neues Frage Material für mich. – jaggedSpire