Musze przetestowac metode, ktora jako parametr bierze inny obiekt i on ma metode getThings i tam ta metoda petli po tych thingach i wchodzi w jedno z rozgalezien dla danej nazwy tego thinga. Jak zamockowac taki obiekt o danym thingu, jako parametr to metody? To jest moja proba, ale w then return chyba powinien byc Optional.of(wywolanie konstruktora) czy cos takiego
when(obj.getThings().stream().anyMatch(p->p.getName()=="DANA NAZWA")).thenReturn(Optional.of(obj));

- Rejestracja:ponad 6 lat
- Ostatnio:dzień
- Postów:443

- Rejestracja:ponad 6 lat
- Ostatnio:dzień
- Postów:443
btw getThings zwraca liste thingow, a thingi to dto, obiekty typu entity wiec nie da sie normalnie skonstruowac tego obiektu
- Rejestracja:ponad 6 lat
- Ostatnio:prawie 3 lata
- Postów:27
I THING that you should show some code or learn jezyk polska

- Rejestracja:około 17 lat
- Ostatnio:około 9 godzin
- Postów:1876
Nic nie zrozumiałem z tego opisu, ale podpowiem: nie mockować!
- Rejestracja:około 5 lat
- Ostatnio:prawie 3 lata
- Postów:360
Zbyt chaotycznie.
Dodaj kod metody.
Po co chcesz to mockować.
Biblioteka do mockowania ma już swoje testy :)

- Rejestracja:ponad 21 lat
- Ostatnio:około 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
A czemu po prostu nie stworzysz tego obiektu i nie przekażesz do testu? Jak miałabyś metodę która oczekuje stringa to też go mockujesz i ustawiasz zeby np. jakieś length
zwracało odpowiednią wartość? Czy moze po prostu używasz Stringa?
Swoją drogą i on ma metode getThings i tam ta metoda petli po tych thingach
to bardzo zły design i gwałt na enkapsulacji i w ogóle dramat. To twój obiekt powinien mieć metodę getMatchingThing(String cośtam)
, a nie że wyciągasz w jakimś innym miejscu jego bebechy i w nich mieszasz. Programowanie obiektowe, mówi ci to coś? o_O
edit: a to co napisałaś wyżej z tym mockiem to też dramat, bo widać ze nie rozumiesz jak to mockowanie w ogóle działa. Trzezba by cały ten łańcuszek zbudować jedno oczko po drugim, tzn ustawić expect na getThings
który zwróciłby ci mocka listy, potem na nim ustawić że stream
zwróci mocka strumienia itd. Generalnie szaleństwo.


- Rejestracja:ponad 6 lat
- Ostatnio:dzień
- Postów:443
tak to mniej wiecej wyglada
public costam method(Object1 obj) {
for (Thing thing: obj.getThings) {
if ("WARUNEK".equals(thing.getName())) return costam;
}
}
Wiec moje pytanie jak przetestowac ta metode przez przekazanie obiektu w ktorym jeden z elementow thing posiada name:"WARUNEK"
Oczywiscie w realu jest dluzsza i bardziej skomplikowana, np to rozgalezieni nic nie zwraca tylko modyfikuje w pewien sposob rezultat
- Rejestracja:około 6 lat
- Ostatnio:około 2 lata
- Postów:49
public class Object1 {
List<Thing> things;
public Object1(List<Thing> things) {
this.things = things;
}
public List<Thing> getThing() {
return things;
}
}
...
new Object1(List.of(new Thing(name: "WARUNEK")))
odpowiedz: nie mockować ?
Oczywiscie w realu jest dluzsza i bardziej skomplikowana, np to rozgalezieni nic nie zwraca tylko modyfikuje
, jak modyfikuje to sprawdzasz np czy Thing'i
nie zostały zmodyfikowane
myślę że problem polega na tym że próbujesz coś zmockować czego nie musisz/potrzebujesz zmockować, dlatego masz problem którego nie jesteś w stanie opisać




- Rejestracja:ponad 8 lat
- Ostatnio:dzień
- Lokalizacja:U krasnoludów - pod górą
- Postów:4708

- Rejestracja:około 17 lat
- Ostatnio:około 9 godzin
- Postów:1876
Jw. nie musisz pisać testu per klasa. Najpierw zadaj sobie pytanie, jakie zachowanie/historyjkę testujesz. Nie testuj implementacji. Potem jeśli chodzi o kod, to w teście jednostkowym podnieś cały moduł/komponent bez żadnych mocków. Testuj na realnych obiektach, na produkcji nie ma mocków.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.