Kann das Fixture nur einmal initialisiert und in mehreren Testfällen verwendet werden?

7

Ist es möglich, das Gerät nur einmal zu initialisieren und es in mehreren Testfällen innerhalb derselben Testsuite zu verwenden? Im folgenden Beispiel wird Fixture mehrfach konstruiert und zerstört:

%Vor%

Aber ich möchte, dass das Fixture nur einmal erstellt wird, wenn die Testsuite beginnt und von allen Testfällen geteilt wird. Ist es möglich? Der Destruktor würde nach Verlassen der Testsuite aufgerufen werden.
Ich verwende Boost Test Framework, habe aber kein Problem mit anderen Frameworks wie UnitTest ++.

    
congusbongus 10.04.2013, 06:11
quelle

1 Antwort

19

Jeder Testfall wird von der Test-Suite-Fixture abgeleitet, die zu Beginn jedes Testfalls erstellt und beim Abschluss zerstört wird (in Ihrem Fall werden sowohl test_case1 & amp; test_case2 von F abgeleitet). Das Gerät konfiguriert und bereinigt die Umgebung für jeden einzelnen Testfall.

Für Unit-Tests ist dies normalerweise die bevorzugte Strategie - jeder Testfall ist eigenständig und vollständig atomar.

In einigen Szenarien (z. B. Integrationstests) ist es möglicherweise vorzuziehen, eine teure Ressource einmal zu erwerben und sie über alle Testfälle zu behalten. Dies kann über eine GLOBALE FIXTURE erfolgen, die zu Beginn des Testlaufs erstellt und beim Beenden des Tests zerstört wird.

Wenn Testfälle eine andere Konfiguration / Konfiguration der globalen Ressourcen erfordern, kann GLOBAL FIXTURE nicht verwendet werden und Sie sollten Ihre Teststrategie überdenken, so dass jeder Testfall seine eigene Umgebung konfiguriert und bereinigt.

Leider haben Testfälle keinen direkten Zugriff auf die globale Testvorrichtung, daher müssen Sie einen Mechanismus bereitstellen, der es ihnen ermöglicht, auf die Ressource zuzugreifen (z. B. über eine globale Variable oder Singleton).

Im folgenden Beispiel ist MyFixture ein Singleton, der die Ressource enthält. z.B.

%Vor%     
mark 10.04.2013 07:11
quelle