p.....k
p.....k
#java #programowanie
Zadanie dla #programista15k
Jak sprytnie sprawdzić asercją w junit, że 2 Sety mają wszystkie takie same atrybuty i kolejność, gdy MyObject nie ma hasChode() ani compareTo()
?
  • Najlepsze
  • Wszystkie komentarze
Barca
Barca
5
Poza tym co to znaczy "kolejność Seta" skoro to jest zbiór a nie np. LinkedList. Czyli wór bez żadnej kolejności.
patrolez
@programista4k: nie jestem Javowcem, ale kurna jak Set może działać w ogóle bez implementacji liczenia Hasha lub komparatora?

Przecież to jest niemożliwe.
Ark00
Ark00
Ark00
3
Set może działać w ogóle bez implementacji liczenia Hasha lub komparatora?


@patrolez: bazowa klasa Object w javie implementuje funkcję hashCode i equals, dlatego działa
Ark00
Ark00
Ark00
3
@zjadacz_wyjadacz: zakładam, że op chce porównać po wartości a nie referencji
Ark00
Ark00
Ark00
2
@bbkon: LinkedHashSet zapewnia kolejność wrzucenia elementów
Ark00
Ark00
Ark00
1
@programista4k: equals zaimplementowane?
zjadacz_wyjadacz
@programista4k: domyślnie equals/hashCode działają ok dla tożsamych obiektów, jeśli to nie wystarczy, trzeba zaimplementować. Alternatywnie jakaś bardziej złożona weryfikacja czy są równoważne np z użyciem dodatkowej metody pomocniczej, ale nie polecam.
zibizz1
zibizz1
@programista4k: przeiteruj je jednocześnie? Jest w Java coś takiego jak enumerator?
W C# pobierasz sobie 2 enumeratory dla każdego seta i w pętli for po ilości elementów sprawdź czy kolejne obiekty są równe ( ta sama referencja) i będzie śmigać
tomp3
tomp3
tomp3
1
@programista4k: Być może zdecydowanie za późno, ale zaskoczony jestem, że nikt jeszcze nie napisał nic o AssertJ. Jest to jedna z najlepszych bibliotek do asercji w Java i podejrzewam, że to, czego oczekujesz, można by zrobić tak:

Set expectedResult = expectedResult();
Set result = generateResult();
Assertions.assertThat(result)
.usingRecursiveFieldByFieldElementComparator()
.containsExactlyElementsOf(expectedResult);
p.....k
p.....k
@patrolez: za mocny jest, a ciem tylko, żeby sprawdzał czy atrybuty są takie same.
p.....k
p.....k
@Barca: LinkedHashSet
bbkon
bbkon
0
@programista4k: containsAll?
Ark00
Ark00
Ark00
0
@bbkon: jak nie ma i nie może nadpisać metod z Objecta to musi jawnie porównywać wg wartości pól do których ma publiczny dostęp przez gettery (np. zaimplementować Comparator) i użyć iteratorów z obu setów do sprawdzenia kolejności elementów.

@programista4k:
bbkon
bbkon
0
@Ark00: Chcesz sprawdzać kolejność wartości w setach? Jaki to ma sens?
Ark00
Ark00
Ark00
0
@bbkon: spytaj opa
bbkon
bbkon
0
@Ark00: ok, ominąłem info, że to LinkedHashSet. W takim razie można to zrobić tak jak napisałeś wyżej.