testowanie - przekaz jako parametr getThings zawierajacy pewien element

testowanie - przekaz jako parametr getThings zawierajacy pewien element
lambdadziara
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Postów:443
0

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));

lambdadziara
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Postów:443
0

btw getThings zwraca liste thingow, a thingi to dto, obiekty typu entity wiec nie da sie normalnie skonstruowac tego obiektu

VZ
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:27
2

I THING that you should show some code or learn jezyk polska

Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 9 godzin
  • Postów:1876
1

Nic nie zrozumiałem z tego opisu, ale podpowiem: nie mockować!


”Engineering is easy. People are hard.” Bill Coughran
UR
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:360
1

Zbyt chaotycznie.
Dodaj kod metody.

Po co chcesz to mockować.
Biblioteka do mockowania ma już swoje testy :)

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom
lambdadziara
ja tego nie pisalam
lambdadziara
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Postów:443
0

tak to mniej wiecej wyglada

Kopiuj
    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

edytowany 2x, ostatnio: lambdadziara
ZN
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 lata
  • Postów:49
1
Kopiuj
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ć

edytowany 3x, ostatnio: ZabawnyNick
lambdadziara
things to nie jest lista stringow, tylko lista obiektow typu dataobject (dto to sie chyba nazywa), zeby je skonstruktowac -pewnie musze poszukac serwisu. Fajnie by bylo jesli ten framework mockowy dalby mi mozliwosci wygenerowania listy obiektow dto z roznymi nazwami, zeby nie korzystac z serwisu, wyciagac prawdze dane z bazy itp
lambdadziara
moze sa w sumie settery na tym dto, musze zobaczyc jeszcze
ZN
poprawiłem, tak musisz je jakoś stworzyć, muszą posiadać jakiś konstruktor :) , ogólnie nie Mockujesz czegoś co da się stworzyć
lambdadziara
ok, mato sens, domyslny konstruktor musi miec. dzieki
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:dzień
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4708
2

Podpowiedź kolejna: nie testować metod ani klas. Zastanów się co to ma robić( w sensie : do czego potrzebujesz). I sprawdź testem czy to robi.


jeden i pół terabajta powinno wystarczyć każdemu
UR
Dokładnie, chyba że ktoś lubi bardzo poprawiać testy po każdej mini zmianie.
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 9 godzin
  • Postów:1876
1

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.


”Engineering is easy. People are hard.” Bill Coughran

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.