Testy jednostkowe dla poprawności działania struktur danych

0

Jestem w trakcie pisania pakietu implementującego strukturę grafu. Zapewnia on metody m.in. : tworzenie grafu, dodawanie węzłów, odejmowanie węzłów, dodawanie krawędzi... itd. Chciałem jakoś przetestować, czy moje metody dodawania/odejmowania węzłów działają poprawnie. Zawsze moje wszelkie testy opierały się na pisaniu własnych krótkich aplikacji testujących, debuggowaniu i wstawianiu printlnów tu i ówdzie. Tym razem postanowiłem podejść do sprawy trochę bardziej profesjonalnie i skorzystać z testów jednostkowych za pomocą JUnit. Nigdy tego nie robiłem. Poszukałem trochę w necie i po paru artykułach, przeczytanych raz bardziej raz mniej dokładnie zauważyłem, że wszędzie testy wyglądają w ten sposób, że wpisuję wartość oczekiwaną i aktualną + ew. margines błędu, a test sprawdza czy się zgodziło czy nie.
Nie bardzo wiem, jak do tego schematu dopasować sprawdzenie poprawności dodawania elementów do struktury danych. Nie chcę porównywać intów czy doubli tylko chciałbym widzieć czy struktura (graf) zmienia się we właściwy sposób: czy wierzchołki są dobrze dodawane i czy listy sąsiedztwa poprawnie się aktualizują.
Czy da się jakoś to przetestować przy użyciu JUnit? Czy raczej do tego rodzaju testu muszę sobie sam napisać kod?

0

Dokładnie do tego używałem swoje pierwsze testy jednostkowe.

Aby test był dobrze zrobiony najlepiej:

  • zrób tak żeby każdy test budował strukturę od początku i potem ją zwalniał
  • test po wykonaniu testowanej operacji sprawdza poprawność struktury - może być na kilka sposobów, np. po dodaniu elementu sprawdza czy struktura jest niepusta
  • dobrze jeśli każdy test wykonuje się niezależnie, czyli jeśli jeden się nie powiedzie, to i tak testuje się reszta
  • testy nie powinny wymagać przeglądania loga, na końcu cały test powinien pokazać OK/ nie-OK

Większość z tych powyższych załatwi Ci pewnie JUnit.
Może się przydać ta wtyczka: http://junit-addons.sourceforge.net/junitx/util/PrivateAccessor.html

0

W takich przypadkach mozna np. zaimplementowac toString() czy cos powobnego, co w sposob czytelny opisuje graf. Wazne jest, abys rowniez w latwy sposob sam mogl stworzyc taki opis. I teraz twoj test:

  1. tworzy graf, wykonuje na nim operacje
  2. porownuje wynik metody toString() z twoim oczekiwanym stringiem

Wazne jest, abys rowniez mial pewnosc ze toString() dziala poprawnie. W podany przeze mnie sposob testy sa rowniez dosc czytelne, poniewaz w jasny sposob opisuja oczekiwany wynik. Mozesz uzywac zewnetrznych plikow, plaskich stringow lub wielolinijkowych stringow, jak wolisz.

0

@vpiotr Tak, ale samo sprawdzenie czy struktura jest niepusta nie da mi odpowiedzi czy jest poprawna.
@mućka Właśnie też coś takiego mi przyszło do głowy, że po prostu dodam chyba jakieś toString() które mi ładnie "rozrysuje" graf.

1 użytkowników online, w tym zalogowanych: 0, gości: 1