Mam klasę testu Parametrized z pakietem testów jednostkowych, które ogólnie kontrolują tworzenie niestandardowych wiadomości e-mail. W tej chwili klasa ma wiele testów, które zależą od czynników używanych w parametryzowanej klasie, przepływ testów jest taki sam dla każdego testu. Przykład testu:Jeśli instrukcje w testach
@Test
public void testRecipientsCount() {
assertEquals(3, recipientsCount);
}
musiałem dodać dodatkową funkcjonalnością do mojej klasy e-mail, który dodaje kilka dodatkowych e-maili wewnętrznych do listy odbiorców, a to zdarza się tylko do niektórych przypadkach, a to prowadzi do mojego problemu .
Powiedzmy, że chcę potwierdzić ilość utworzonych wiadomości. Dla starego testu było to samo dla każdego przypadku, ale teraz różni się w zależności od przypadku. Najbardziej intuicyjny sposób dla mnie było, aby dodać if:
@Test
public void testRecipientsCount(){
if(something) {
assertEquals(3, recipientsCount);
}
else {
assertEquals(4, recipientsCount);
}
}
...
ale my bardziej doświadczony współpracownik mówi, że powinniśmy unikać IFS w klasach testowych (i trochę się z tego).
Pomyślałem, że test podziału na dwie klasy testowe może zadziałać, ale doprowadziłoby to do redundancji kodu w obu klasach (wciąż muszę sprawdzić, czy zostały utworzone nie-iternalne wiadomości, ich rozmiar, zawartość itp.) Oraz dodano kilka linii dla jednego z nich.
Moje pytanie brzmi: jak to zrobić, więc nie używam, jeśli jest lub mnóstwo redundantnego kodu (nie używanie sparametryzowanej klasy spowodowałoby jeszcze więcej zbędnego kodu)?
'dodaje kilka dodatkowych wewnętrzne wiadomości e-mail do listy odbiorców ". Czy ta lista adresów wewnętrznych jest wstrzykiwana do klasy? Jeśli tak, po prostu wyczyścisz tę listę dla większości testów i masz jeden lub dwa testy 'testInternalMail', które wypełniają tę listę –
Nie sądzę, że jest to możliwe w klasie testowej Parametrized. Dodano przypadki testowe, które sugerowałbyś uruchomić dla każdego zestawu argumentów, a asercje byłyby inne dla niektórych. Twoje rozwiązanie działałoby bez klasy Parametrized, ale chciałbym tego uniknąć. – Raidmaster
Czy możesz zmienić swój opublikowany kod na bardziej kompletną (ale wciąż niewielką i fałszywą) klasę testową, abyśmy mogli zrozumieć, jak konfigurujesz swoje parametry? –