Ostatnio naciskałem na moją grupę, aby włączyła więcej testów podczas pisania swojego kodu. Było kilka poważnych błędów, których złapanie zajęło dużo więcej czasu, niż prawdopodobnie mówienie było konieczne, ponieważ nie mieliśmy dobrego reżimu testowania.
Podejrzewam jednak, że posiadanie odpowiednich narzędzi do automatyzacji (lub usprawnienia) procesu z pewnością byłoby przydatne. Z drugiej strony nie znam różnych opcji pakietów testowych C ++ i jak się między nimi decydować?
Czy istnieją wytyczne dotyczące tego, czego należy szukać - i czy istnieją takie, które są specjalnie dostosowane do zastosowań numerycznych?
Ostatnio korzystam z googletest do testowania kilku bibliotek numerycznych, nad którymi pracuję, i jestem z tego bardzo zadowolony. Możesz napisać dość proste testy bardzo szybko lub możesz napisać skomplikowane testy wymagające inicjalizacji danych i tak dalej. Zapewnia również (podobnie jak wielu innych) sposoby na łatwe porównywanie zmiennoprzecinkowe, a nie bitowe.
źródło
Jeśli budujesz swój kod za pomocą CMake, oczywistym wyborem byłby mechanizm ctest . Pozwala przetestować kod ręcznie za pomocą polecenia
ctest
, a także obsługuje obszerne testy nocne za pomocą CDash .źródło
Do naszej biblioteki C ++ z biologii obliczeniowej ( Chaste ) używamy http://cxxtest.com/ . Jest to dość prosty w użyciu, działa dobrze, zapewnia kilka makr do testowania za pomocą
assert()
instrukcji stylu. W przypadku obliczeń naukowych są to na ogół proste bezpośrednie porównaniaTS_ASSERT_EQUALS(a,b)
lub porównania numeryczne zTS_ASSERT_DELTA(a,b,tolerance)
.Za pomocą tych podstawowych makr można łatwo napisać dodatkowe makra, aby porównać własne wektory / macierze. Przydatnie możesz także sprawdzić, czy Twój kod wyświetla odpowiednie ostrzeżenia i komunikaty o błędach w danych sytuacjach. Możesz przeglądać niektóre przykłady w
test
folderach naszego kodu źródłowego tutaj: https://chaste.cs.ox.ac.uk/trac/browser/trunkźródło