Unit-Tests nicht exportierte Klassen in einer DLL

Entwickeln wir eine C++ - Anwendung mithilfe von Visual Studio 2008 und unit-test mit Boost.Test. Im moment haben wir eine separate Lösung, die enthält unsere unit-tests.

Viele unserer Projekte in die core-Lösung produzieren DLL. Wir sind begrenzte Testabdeckung, weil wir Sie nicht testen, nicht exportierte Klassen.

Ich habe zwei Ideen, wie diese getestet werden konnte:

  1. Export alles
  2. Setzen Sie die tests in der DLL (gleiche Projekt und Lösung) und die Verwendung von Boost.Test externe Läufer

Ich bin mir nicht ganz sicher, was die Nachteile sein würde. Nummer 1 oben Pausen von Modul-level-Kapselung, und die Nummer 2 könnte in eine viel größere DLL, es sei denn, es ist möglich, um nur den test-code in bestimmten Konfigurationen.

So, gibt es irgendwelche gravierenden Nachteile zu den oben genannten Methoden, oder können Sie sich andere Lösungen überlegen?

  • Ich würde gerne der Hinweis auf CMake bietet eine Funktion namens "Objekt-Bibliotheken". (add_library( foo_obj OBJECT ... )) In meinen Projekten Baue ich die Quellen in Objekt-Bibliotheken, die ich dann den link in die DLL (add_library( foo SHARED ... $<TARGET_OBJECTS:foo_obj> )) und seine test-Treiber (add_executable( foo_test ... $<TARGET_OBJECTS:foo_obj> )). Es ist eine Variante von den Antworten, die unten mit einem anderen build-system (das ist, warum ich fügte hinzu, diese als Kommentar, keine Antwort), aber es ist die Lösung des gleichen Problems.
InformationsquelleAutor Jon | 2011-03-31
Schreibe einen Kommentar