Opracowujemy aplikację w języku C++ przy użyciu programu Visual Studio 2008 i testów jednostkowych przy użyciu metody Boost.Test. W tej chwili mamy oddzielne rozwiązanie, które zawiera nasze testy jednostkowe.Testowanie jednostek nie wyeksportowanych klas w bibliotece DLL
Wiele naszych projektów w podstawowym rozwiązaniu tworzy biblioteki DLL. Mamy ograniczone pokrycie testowe, ponieważ nie możemy przetestować nieeksportowanych klas.
Mam dwa pomysły na te mogą być testowane:
- Export wszystko
- umieścić testy wewnątrz DLL (sam projekt i roztwór) i użyć zewnętrznego biegacza Boost.Test za
Nie jestem do końca pewien, jakie byłyby wady. Powyższy numer 1 przerywa enkapsulację na poziomie modułu, a numer 2 może spowodować znacznie większą bibliotekę DLL, chyba że możliwe jest uwzględnienie kodu testowego tylko w niektórych konfiguracjach.
Czy są zatem jakieś poważne wady powyższych metod lub czy można wymyślić inne rozwiązania?
Chciałbym wskazać na [CMake] (http://www.cmake.org) oferującą funkcję o nazwie "biblioteki obiektów". ('add_library (foo_obj OBJECT ...)') W moich projektach buduję źródła w bibliotekach obiektów, które następnie łączę w * obie * bibliotekę DLL ('add_library (foo SHARED ... $)') * i * jego sterowniki testowe ('add_executable (foo_test ... $ )'). Jest to wariant poniższych odpowiedzi przy użyciu innego systemu kompilacji (dlatego dodałem to jako komentarz, a nie odpowiedź), ale rozwiązuje ten sam problem. –
DevSolar