Wpis z mikrobloga

#programowanie #java #junit
Koledzy, uczę się pisać testy jednostkowe ale mam z tym problemy. Po pierwsze nie wiem czy rozumuję w sposób prawidłowy dlatego prosiłbym na zerknięcie na przypadek który chcę przetestować (domyślam się, że dla testowanej metody, która dodaje trening do dnia, będę musiał zrobić trzy przypadki). Druga sprawa nie mam zielonego pojęcia dlaczego w linii 56 (w tym linku) wywala mi NullPointerException. Prosiłbym o rady bo na razie mimo zapoznania się z jednym kursem, testy to dla mnie nadal czarna magia.
  • 18
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@krasnoludkolo: dokładnie, zamieniłem to na new ArrayList<>(). Tylko teraz wypieprza mi Nulla w zupełnie innym miejscu. Jak widzisz metoda addTraining po LocalDate pobiera Day do którego będę dodawał trening. Niestety teraz w tym miejscu wypieprza mi NullPointera (3 linia w tym paste code co wstawiłem) a chciałbym po prostu, żeby dniem "wejściowym" był getDayWithNulls
  • Odpowiedz
@krasnoludkolo: dobra nie wywowałem dnia w metodzie i NullPointer już nie wyskakuje. Teraz inny problem ehh: java.lang.StackOverflowError, wygooglowałem, że to przez rekurencję, IDE mi podpowiada, że występuje to zjawisko w przypadku getDay i getExpectedDay, jakaś rada jak sobie z tym poradzić?
  • Odpowiedz
@Dominias: Wystarczy spojrzeć na metody getDayWithNulls() oraz expectedDayWithAddedTrainingToNulls() i to co zwracaja. Z każdym wywołaniem jednej z metod w return masz getDayWithNulls() i jak wołasz metodę drugi raz to co ona zwróci? No pewnie, że getDayWithNulls() i tak do usranej śmierci.
  • Odpowiedz
@losowyNickk: tak już to zauważyłem i poprawiłem. Teraz wyskakują mi NullPointery z metodami związanymi z DB, chociaż DB zamokowałem ehhh myślałem, że testy jednostkowe będą nieco łatwiejsze ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@Dominias: when(eq(item).getJSON(anyString())).thenReturn(anyString());
żeby na itemie dało sie wywołać "when" to musi to być mock a u Ciebie z tego co widzę jest to prawdziwy obiekt. W dodatku w thenReturn musisz mu zapodać jakąś wartość, anyString() jest argument matcherem, czyli możesz go użyć w taki sposób:
when(itemMock.getJSON(anyString())).thenReturn("blablabla");
  • Odpowiedz
@Darjo: to jest pierdoła bez wpływu na wynik testu i nie tego dotyczy mój obecny problem, dodałem to jak kombinowałem na różne sposoby kiedy wywalało mi NullPointerException i zapomniałem usunąć po prostu
  • Odpowiedz
@Darjo: to: when(eq(item).getJSON(anyString())).thenReturn(anyString());
powinno wyglądać tak: when(item.getJSON(anyString())).thenReturn(tu wstaw wartość jaką chcesz zwrócić, nie może tu być anyString());
  • Odpowiedz
@Endr3w: teoretycznie to przechodzi, z tym że teraz wywala mi, że item jest nullem przez co dostaję nullpointerexception. Także teraz nie wiem jak sobie poradzić z testowaniem czegoś co używa obiektu z bazy danych skoro zamokowanie item nie pomogło
  • Odpowiedz