2009-04-03 3 views
0

Ich versuche, einige Komponententests für ein vorhandenes C++ - Projekt einzurichten.Unit-Tests und Mocking kleine, wert-wie Klassen in C++

Hier ist das Setup: Ich habe Google Mock ausgewählt, die Google Test enthält. Ich habe ein anderes Projekt (Tests genannt) zur Visual Studio Solution hinzugefügt. Die zu testenden Einheiten befinden sich in einem anderen Projekt namens Main. Es ist geplant, jede cpp-Datei, die ich testen möchte, dem Tests-Projekt hinzuzufügen. Das Tests-Projekt hat Zugriff auf alle Header-Dateien von Main.

Ich habe eine Cpp-Datei zum Tests Projekt hinzugefügt, und es kompiliert, aber kommt mit Linker-Fehler. Die meisten basieren auf einer von COleDateTime abgeleiteten Klasse namens CTimeValue. Die zu testende Einheit verfügt über Methoden mit Werten für den Wert CTimeValue und gibt einige CTimeValue-Attribute an.

Ich möchte das UUT isoliert testen und Mocks und Fälschungen für alle Abhängigkeiten verwenden. Ich sehe nicht, wie man es mit CTimeValue macht. Es wird als Wert verwendet, enthält keine virtuellen Methoden, ist aber immer noch sehr komplex und würde einen separaten Komponententest verdienen.

CTimeValue ist nur eine von vielen Klassen, die im Projekt so ist. Wie kann ich das Testen von Klassen isolieren, die diese benutzerdefinierten Typen verwenden?

Prost, Felix

Antwort

3

Manchmal kann man nicht einfach Dinge verspotten. In diesem Fall können Sie einen umfassenden Test für die betreffende Klasse (CTimeValue) durchführen und sicherstellen, dass Sie die Tests für diese Klasse als Subsuite in Ihrem anderen Test ausführen.

+0

Dies wird tun müssen, danke für die Antwort. Mocks scheinen mit der Wertesemantik nicht gut zu funktionieren. – TheFogger

0

Mit einem Mock-Objekt müssen Sie nur die Methodensignaturen hinzufügen, die Ihr UUT verwendet. Vielleicht können Sie einen Mock mit Google Mock erstellen. Natürlich benötigen Sie eine separate Testsuite für die CTimeValue-Klasse, und wenn Sie das haben, ist es wahrscheinlich besser, das tatsächliche Objekt zu verknüpfen. Sie müssen entscheiden, ob es sich lohnt, eine Interface-Klasse zu erstellen, aus der der Schein erstellt werden kann.

0

Mocks eignen sich am besten für die Arbeit mit Objekten, die Dienste füreinander bereitstellen, die Erwartungen an die Mocks beschreiben ihre Beziehungen. Es macht keinen Sinn, Wertobjekte zu verspotten.