Catch – problemy przy testowaniu plików *.cpp – unresolved external symbol

Pojawiły się pewne problemy przy testowaniu plików *.cpp. Dotychczas wszystkie pliki aplikacji objęte testami były zdefiniowane w plikach nagłówkowych *.h, więc problem się nie ujawniał, bo nie był potrzebny żaden kod z plików *.cpp. Dzisiaj postanowiłem napisać test do dość rozbudowanej klasy, której konstruktor został zdefiniowany w pliku *.cpp i niestety pojawił się błąd „unresolved external symbol”. Trochę czasu zajęło mi znalezienie przyczyny, którą był brak dołączonych plików *.cpp zawierających definicje konstruktorów i metod. Rozwiązaniem problemu było dołączenie plików *.cpp aplikacji do projektu test.pro.

Niestety konieczne jest tutaj ręczne zarządzanie tymi plikami, ponieważ przy tworzeniu nowej klasy lub pliku źródłowego kreator może dodać go tylko do jednego projektu (app.pro lub test.pro), a nie do dwóch jednocześnie. Częściowym rozwiązaniem tej niedogodności mógłby być podział projektu na trzy części: app.pro zawierający tylko plik main, test.pro z testami oraz lib.pro zawierający wszystkie pliki źródłowe klas. Projekt lib.pro byłby dołączany (linkowany) do projektów app.pro i test.pro. Nie testowałem jednak tego rozwiązania w praktyce. Przykład takiej struktury projektu.

Przy okazji napiszę, że warto pisać testy. Ułatwiają one pisanie bardziej skomplikowanych funkcji bądź takich gdzie można pomylić się „o jeden”. Funkcję void insertDescriptionBefore(BlockDescription blockDescription) w klasie AllLinesDescription implementowałem zaczynając od napisania testów sprawdzających czy metoda działa prawidłowo i otrzymujemy właściwe dane, a dopiero później dopasowywałem kod tej metody tak, aby przechodziła pozytywnie wszystkie testy. Myślę, że bez testów jednostkowych napisanie tej funkcji zajęłoby o wiele więcej czasu i nerwów.

GitHub

Dodaj komentarz

Twój adres email nie zostanie opublikowany.