Natrafiłem na pewien problem podczas testowania i choć go rozwiązałem to dalej nurtuje mnie ciekawość w jaki sposób brać na warsztat podobne sytuacje. Mianowicie, pisząc unit testy w
#spring chciałem przetestować serwis, w którym metoda tworzy w sobie obiekt, coś ala klasę konfiguracyjną/wrapper, ale go nigdzie nie zwraca na zewnątrz.
`classA
foo(){
Object x = new Object()
x.setSomething(...)`
Jest jakiś pattern, żeby w unit testach sprawdzić poprawność wywołania takiej metody setSomething() z odpowiednimi wartościami?
Myślałem, żeby po prostu sprawdzić te argumenty z wykorzystaniem ArgumentCaptor, ale nie wiem w jaki sposób miałbym uchwycić taki obiekt. Nie jest on componentem, nie jest obiektem wsadowym, ani nie jest zwracany. Mówiąc wprost, w jaki sposób mam testować jednostkowo wywoływanie funkcji obiektów pomocniczych?
A teraz na przykładzie.
https://stackoverflow.com/questions/73808058/how-to-test-template-engine-while-styling-emails-with-junit-and-mockito-spring
Natrafiłem ten problem w dokładnie w tej samej klasie. Chodzi o obiekt MimeMessageHelper, który jest jakimś wrapperem MimeMessage z rozszerzonym interfejsem. Pisząc testy z automatu machnąłem mocka Mimemessage zwracanego z JavaMailSendera. Problem rozwiązałem sugerując się właśnie tym wątkiem tworząc obiekt Mimemessage, gdzie sprawdzam jego wartości grzebiąc w jego tablicach, ale co jeśli w przyszłości chciałbym przetestować czy jakieś funkcje w obiekcie pomocniczym się wywołują? W tym przypadku było to tylko ustawienie wartości kilku zmiennych, a nie dajmy na to jakiś invoke metody void, co normalnie bym testował na mocku metodą verify.
#java #programowanie #naukaprogramowania #programista15k