Czy mogę sprawdzić istnienie adnotacji w teście jednostkowym?

9

Mam hierarchię klas Java, która jest utworzona przez klasę Abstract i jej rozszerzenia N. W klasie abstrakcyjnej mam metodę, która jest opatrzona adnotacją @Remove. Chociaż nie otrzymamy żadnych wyjątków, że szybko się nie powiedzie, jeśli ta adnotacja zostanie usunięta, możemy wyjść z wyjątków pamięci, więc chciałbym mieć pewność, że zauważymy tak szybko, jak to możliwe, jeśli adnotacja zniknie w trakcie refaktoryzacji.

Próbuję stworzyć GUTS (dobre testy jednostkowe), więc pomyślałem, że mogę udokumentować ten „wymóg techniczny” w moich testach, z przypadkiem testowym, który to stwierdza.

Ale to nie jest cecha, jest to szczegół implementacyjny i nie jest związane z zachowaniem metody (metoda może być pusta, ale musi istnieć i musi być opatrzona adnotacjami).

Czy można w tym celu utworzyć test, czy też istnieje inny sposób sprawdzenia istnienia tej adnotacji?

JSBach
źródło
1
Pytasz, jak to zrobić, czy też jest to dobra praktyka inżynierii oprogramowania? Odpowiedź na to ostatnie pytanie brzmi „tak”. Testy weryfikują jakość bazy kodu; niekoniecznie sprawdzają obecne zachowanie . Doskonale jest mieć testy, które weryfikują warunki mające na celu wspieranie dobrego zachowania w przyszłości .
Kilian Foth,

Odpowiedzi:

5

Tak, utwórz test jednostkowy. Mówisz, że jeśli adnotacja zostanie usunięta, możesz wydostać się z błędów pamięci podczas produkcji. To byłby zabójczy błąd. Pozwolenie na to ze względu na pewien pomysł, że testy powinny być w jakiś sposób ograniczone, przynosi efekt przeciwny do zamierzonego. Testy powinny sprawdzać poprawność pod każdym względem. Im szybciej wykryjesz potencjalny problem, tym lepiej przeprowadzenie testu jednostkowego i niepowodzenie kompilacji CI to solidny sposób na uniknięcie błędu. Próba wynalezienia innego mechanizmu zapobiegającego wprowadzeniu takiego błędu nie wydaje się opłacalna. Każdy nowy programista będzie musiał otrzymać wyjaśnienie, w jaki sposób poradzić sobie z „specjalnym przypadkiem” braku funkcjonalnych testów poprawności. Najprawdopodobniej nie jest to dobre wykorzystanie czasu programisty.

Edytuj Zespoły, które robią BDD mogą oddzielić biznesu test funkcjonalny z badań technicznych, takich jak testy wydajności. Zazwyczaj zespoły przeprowadzają różnego rodzaju testy, w tym testy integracyjne, które są przeprowadzane rzadziej niż ich podstawowe testy logiki biznesowej. Zwykle odbywa się to za pomocą profili kompilacji, dzięki czemu programiści mogą często przeprowadzać szybkie testy logiki biznesowej i wolniejsze testy integracji przed zatwierdzeniem kodu. Kompilacja CI uruchomi wszystkie testy.

simbo1905
źródło
2

Kiedy funkcja krytyczna jest implementowana przy użyciu takiej techniki deklaratywnej, wolę używać testu integracji, który obejmuje część środowiska, która rozpoznaje deklarację. Chroni to przed zmianami w zachowaniu ram, nieporozumieniami dotyczącymi efektu deklaracji i tak dalej. Samo sprawdzenie obecności adnotacji nie gwarantuje żadnego konkretnego zachowania.

Jules
źródło
Cześć! To ciekawe, jak na przykład sprawdziłbyś zachowanie adnotacji @remove?
JSBach
Niestety nie znam wystarczająco EJB, aby na to odpowiedzieć - staram się unikać pracy z technologią właśnie dlatego, że trudno mi napisać dobre testy.
Jules
Idea tej adnotacji polega na tym, że informuje ona pojemnik, że fasola może zostać usunięta. Niestety trudno jest przetestować to zachowanie :(
JSBach