Wpis z mikrobloga

Mam pytanie odnośnie testów jednostkowych. konkretny przypadek. Chcemy przetestować taka klasę :

public class Main{
ComplicatedClass field;

public Main(ComplicatedClass field) {
this.field = field;
}

public boolean someMethod() {

if(field.someComplicatedMethod()){
return true;
} else {
return false ;
}
}
}

pytanie czy obiekt ComplicatedClass mam utworzyć w teście w odpowiedni sposób (zależnie od przypadku testowego, czyli dwa przypadki będą ) czy mam ją zamockowac? Klasa ComplicatedClass jest to klasa z mojej aplikacji. ale powiedzmy że jest skomplikowana i do inicjalizacji potrzebuje innych obiektów z mojej aplikacji.

#programowanie #java #mockito #unittest
  • 9
@prnppp: no właśnie chodzi o to że dzieje się magia. tutaj tylko przykład (pisałem na telefonie, więc jak najkrotszy)
podsumowujac: w unit testach wszystkie zależności mockujemy? chyba że to jakieś DTO
@wieszaer: w jednostkowych raczej mockujemy, chyba, że jest inna konwencja w projekcie. Test jednostkowy ma tak naprawdę testować daną część kodu. Przyjmijmy, że w metodzie someComplicatedMethod dzieje się kolejna magia i żeby tak naprawdę mieć sensowne dane to musimy zbudować bardzo dużo obiektów. A tak naprawdę testowanie tamtej logiki nas nie interesuje. Ona została przetestowana w innym miejscu. Jeśli natomiast jest to prosta klasa z atrybutami (np. encja) to raczej powinno
@prnppp: konkretna odpowiedź, o to chodziło, dzięki!
a przy okazji spytam, a więc testy jednostkowe praktycznie są dla każdej klasy więc wiadomo gdzie je trzymac - w pakietach odzwierciedlajacych pakiety z kodem, natomiast gdzie trzymac testy integracyjne? w osobnym pakiecie przeznaczonym na takie testy? czy może obok jednostkowych? jaka jest wtedy konwencja nazywania klas testowych?
@wieszaer: jest jedna prawidłowa droga postępowania:

Jeśli obiekt da się zainicjalizować 'normalnie' to tak robisz i testujesz na prawdziwych obiektach. Jeśli nie (lub jeśli spełnia wszelkie znamiona kandydata do mocka), mockujesz.

Jak ktoś twierdzi, że powinieneś mockować, 'bo możesz', albo 'bo to jest zewnętrzna zależność', to znaczy, że o testowaniu jednostkowym jeszcze za wiele nie wie.