Mocno wierzę w stosowanie testów jednostkowych w ramach budowania dużych aplikacji wieloplatformowych. Obecnie planujemy przeprowadzenie testów jednostkowych w ramach oddzielnego projektu. Ma to tę zaletę, że utrzymuje czystość kodu źródłowego. Myślę jednak, że oddzieliłoby to kod testowy od implementacji jednostki. Co sądzisz o tym podejściu i czy są jakieś narzędzia, takie jak JUnit dla aplikacji C++?W jaki sposób wdrażasz testowanie jednostkowe w dużych projektach C++?
Odpowiedz
Istnieje wiele frameforks jednostka testowa dla C++. CppUnit z pewnością nie jest tym, który wybrałbym (przynajmniej w wersji stabilnej 1.x, ponieważ brakuje wielu testów i wymaga wielu zbędnych linii kodów). Do tej pory moją preferowaną strukturą jest CxxTest i planuję kiedyś przeprowadzić ocenę Fructose.
jakikolwiek sposób, istnieje kilka "papiery", które oceniają ram C++ TU
W przeciwieństwie do JUnit i lepiej pasuje do C++: [CATCH] (https://github.com/philsquared/Catch) . –
To rozsądne podejście.
miałem bardzo dobre wyniki zarówno z UnitTest++ i Boost.Test
Szukałem na CppUnit, ale dla mnie, to czułem się bardziej jak w tłumaczeniu rzeczy JUnit niż coś mającego na C++.
Aktualizacja: W dzisiejszych czasach wolę używać Catch. Okazało się, że jest skuteczny i prosty w użyciu.
[doctest] (https://github.com/onqtam/doctest) jest moją reimplementacją Złap z ogromnym naciskiem na szybkość kompilacji - sprawdź [FAQ] (https://github.com/onqtam/doctest/blob/master/doc/markdown/faq.md#how-is-doctest-different-crom-catch), aby zobaczyć, w jakim względzie są one różne – onqtam
CppUnit jest bezpośrednim odpowiednikiem JUnit dla aplikacji C++ http://cppunit.sourceforge.net/cppunit-wiki
Osobiście stworzył testy jednostkowe w innym projekcie i stworzył oddzielną konfigurację build który zbudowany wszystkie testy jednostkowe i kod źródłowy zależnej. W niektórych przypadkach chciałem przetestować prywatne funkcje członkowskie klasy, dlatego stworzyłem klasę Test jako klasę przyjaciela do testowanego obiektu, ale ukryłem deklaracje przyjaciela podczas budowania konfiguracji "beztestowych" za pomocą deklaracji preprocesorów.
Skończyłem robić te gimnastyki kodowania, ponieważ byłem integrowania testów do kodu starszego jednak. Jeśli zaczynasz w celu testowania jednostkowego, lepszy projekt może być prosty.
Można utworzyć projekt testu jednostkowego dla każdej biblioteki w drzewie źródłowym w podkatalogu tej biblioteki. Kończy się to aplikacją sterownika testowego dla każdej biblioteki, co ułatwia uruchomienie pojedynczego zestawu testów. Umieszczając je w podkatalogu, utrzymuje bazę kodu w czystości, ale także utrzymuje testy blisko kodu.
Skrypty można łatwo napisać, aby uruchomić wszystkie zestawy testów w drzewie źródłowym i zebrać wyniki.
Używam niestandardowej wersji oryginalnego CppUnit od lat z wielkim sukcesem, ale są teraz inne alternatywy. GoogleTest wygląda interesująco.
Wydaje mi się, że jesteś na właściwej drodze dzięki testom jednostkowym i świetnemu planowi poprawy niezawodności produktu.
Chociaż testowanie jednostek nie rozwiąże wszystkich problemów podczas konwersji aplikacji na różne platformy lub nawet różne systemy operacyjne. Powodem tego jest testowanie jednostki procesowej w celu wykrycia błędów w aplikacji. Po prostu wyrzuca tyle wejść, ile można sobie wyobrazić w systemie i czeka na wynik na drugim końcu. To tak, jakby małpa ciągle naciskała na klawiaturę i obserwowała wyniki (beta testerzy).
Aby przejść do następnego etapu, przy dobrych testach jednostkowych należy skupić się na wewnętrznym projekcie aplikacji. Najlepszym podejściem, jakie znalazłem, było wykorzystanie wzorca projektowego lub procesu projektowania zwanego "programowaniem umowy" lub "Projektowaniem według umowy". Druga książka, która jest bardzo pomocna w budowaniu niezawodności w twoim głównym projekcie.
Debugowanie procesu rozwoju: praktyczne strategie dotyczące koncentrowania się, trafiania na daty statków i budowania stałych zespołów.
W naszym zespole programistów bardzo uważnie przyjrzeliśmy się temu, co uważamy za błąd programisty, błąd programisty, błąd projektowy i sposób, w jaki możemy używać testów jednostkowych, a także budować niezawodność w naszym pakiecie oprogramowania za pośrednictwem DBC i postępować zgodnie z zaleceniami debugowania procesu rozwoju.
używam unittest ++. Testy są w osobnym projekcie, ale rzeczywiste testy są powiązane z rzeczywistym kodem. Istnieją w folderze pod testowaną sekcją. tj:
myproject \ src \ < - źródło rzeczywistej aplikacji
myproject \ src \ testuje < - źródło testów
Jeśli masz zagnieżdżone foldery (a kto nie), to oni też będą mieli własny podkatalog testów.
Robimy to samo, a nasz system budowy automatycznie buduje test EXE pochodzi z kodu znalezionego pod dowolnym folderem źródłowym Unittest. –
Używanie tut http://tut-framework.sourceforge.net/ bardzo prosty, tylko plik nagłówkowy tylko bez makr. Potrafi generować wyniki XML
Powinieneś oddzielić swój kod bazowy od wspólnej biblioteki (dynamicznej), a następnie napisać większą część testów jednostkowych dla tej biblioteki.
Dwa lata temu (2008) brałem udział w dużym projekcie LSB Infrastructure wdrażanym przez The Linux Foundation. Jednym z celów tego projektu było napisanie testów jednostkowych dla 40 000 funkcji z podstawowych bibliotek Linux. W ramach tego projektu stworzyliśmy AZOV technology i podstawowe narzędzie o nazwie API Sanity Autotest w celu automatycznego wygenerowania wszystkich testów. Możesz spróbować użyć tego narzędzia do wygenerowania testów jednostkowych dla twojej podstawowej biblioteki.
- 1. W jaki sposób interfejsy ułatwiają testowanie jednostkowe i kpiny?
- 2. W jaki sposób wdrażasz sortowanie i stronicowanie na rozproszonych danych?
- 3. Cel C - Testowanie jednostkowe i Wyśmiewanie obiektu?
- 4. W jaki sposób wdrażasz zadania Cron do produkcji?
- 5. Wiosna jdbcTemplate testowanie jednostkowe
- 6. Testowanie jednostkowe kodu C++ za pomocą Javy
- 7. Testowanie jednostkowe javascript: w jaki sposób monitorujesz wszystkie testy, które napisałeś i jaki masz zasięg kodu?
- 8. Testowanie jednostkowe z Oracle
- 9. Testowanie jednostkowe (nie Qt) kodu C++ w Qt Creator?
- 10. Testowanie jednostkowe - odgałęzienie SqlDataReader
- 11. Czy generics w D2009 można wykorzystywać w dużych projektach?
- 12. W jaki sposób mogę testować widoki Django w jednostce?
- 13. Kiedy należy przerwać testowanie jednostkowe?
- 14. Testowanie jednostkowe dla projektów iOS
- 15. Jaki jest podpowiedziowy sposób udostępniania wspólnych plików w wielu projektach?
- 16. Praca z Zend Framework i Git w dużych projektach
- 17. W jaki sposób uzyskać dostęp do zasobów surowych w projektach testów Androida?
- 18. Yii testowanie jednostkowe działanie kontrolera bez selenu
- 19. Testowanie jednostkowe w Spring and the Jersey Test Framework
- 20. Jak zorganizować testowanie jednostkowe projektu biblioteki w Xcode?
- 21. Testowanie jednostkowe z tSQLt na kolumnach obliczeniowych
- 22. Testowanie jednostek w CSLA? W jaki sposób? Co?
- 23. W jaki sposób mogę testować widoki jednostkowe i atrybuty autoryzacyjne mojej aplikacji mvc asp.net w nUnit?
- 24. Metoda prywatna Testowanie jednostkowe z Jasmine
- 25. Testowanie jednostkowe za pomocą MockMultipartHttpServletRequest (generuje wyjątek NullPointerException w ItemInputStream.makeAvailable)
- 26. Przekształcanie delegatów C# w testy jednostkowe
- 27. Testowanie jednostkowe kontrolera korzystającego z $ http
- 28. W jaki sposób feof() działa w C
- 29. W jaki sposób należy przepisać bazę danych execute/commit mojej bazy danych, aby umożliwić jej testowanie jednostkowe?
- 30. W jaki sposób są pakowane małe typy danych w C#
Istnieje bardzo podobne pytanie, które właśnie zadano. Spójrz na [CppUnit] (http://cppunit.sourceforge.net), [CppUnitLite] (http://www.objectmentor.com/resources/downloads.html) i "[działa efektywnie ze starszym kodem"] (http: // /www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052) "(wszystko przez Michaela Feathersa –