#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() ?
@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.
@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: 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ć
@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);
Ukrainka prowadząca żabkę w Warszawie chwali się, że zatrudnia w pierwszej kolejności Ukraińców co jest niezgodną z prawem dyskryminacją ze względu na narodowość.
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()
?
źródło: comment_1597322108UdMA7A1tdwjUnOj2HZtBXa.jpg
PobierzPrzecież to jest niemożliwe.
@patrolez: bazowa klasa Object w javie implementuje funkcję hashCode i equals, dlatego działa
@programista4k:
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ć
Set expectedResult = expectedResult();Set result = generateResult();Assertions.assertThat(result).usingRecursiveFieldByFieldElementComparator().containsExactlyElementsOf(expectedResult);