Czy istnieje jakiś cudowny sposób albo jakie są alternatywy. Dajmy na to mam jakiś wynik zwrócony z mapowania. Czy da się jakoś wyświetlić takie dane w formacie json? do testowania
Szczególnie jeśli taka klasa nie ma zaimplementowanego toString to nie zobacze wartości.
Refleksja pozwala przejrzeć programistycznie wszystkie pola w danym obiekcie.
Są też metody serializacji klas (np. JAXB), które pozwalają stosunkowo łatwo zamienić obiekt (edit: drzewo obiektów) na JSON/XML.
https://www.oracle.com/technical-resources/articles/java/javareflection.html
zob. Finding Out About Class Fields
https://examples.javacodegeeks.com/core-java/xml/bind/jaxb-json-example/
Pytanie do jakiego testowania? Do unit testu to nie będzie najlepszy sposób jeżeli klasa sama ukrywa swój stan. Lepiej skorzystać z istniejącego API klasy i testować klasę na podstawie zachowania. Bieda alternatywa to zmiana metody na public/package (warto oznaczyć przez @VisibleForTesting
z Guavy) i dobieranie się do stanu obiektu w taki sposób.
Inny przypadek użycia to porównanie 2 DTO w unit teście, czasami robi się assertEquals(toJson(dtoactual), toJson(dtoExpected))
, jest to nieco lepsze niż assertEquals(dtoActual, dotExpected)
bo widzisz które pola się nie zgadzają. Ale większość porządnych frameworków takich jak assertJ posiada zabawki które poradzą sobie i bez equals i pokażą co się nie zgadza (isEqualToComparingFieldByFieldRecursively
).