Po aktualizacji springa wysypują się testy

Po aktualizacji springa wysypują się testy
RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

Na początku zaznaczę, że jestem bardzo świeży w tej materii. Zaktualizowałem spring boota do wersji 1.5.22.RELEASE. i po tej operacji przestały działać testy. W kodzie testu jest coś takiego:

Kopiuj
private ResultActions checkResultEricsson(final ResultActions resultActions, String prefix) throws Exception {
   prefix = "$.root[?(@.object.vendor.name == 'Ericsson')]";

   resultActions
         .andExpect(jsonPath("$..editStatusName", everyItem(equalTo("NONE"))))
         .andExpect(jsonPath(prefix + "[*].object.additionalParamsList", everyItem(equalTo(null))))
         .andExpect(jsonPath(prefix + "[*].object[?(@.username == 'sb')].password").value("sbspass");  <- tu się wysypuje
}

Zauważyłem, że filtrowanie jsonPath czasami nie działa. W jaki sposób mogę zapisać do logów rezultat działania metody jsonPath(...). Jeśli będę wiedział jakie daje wyniki, to będę mógł stworzyć odpowiedni skrypt. Szukałem w sieci rozwiązania tego problemu ale nic nie znalazłem.

Dziękuję za wszelkie sugestie

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4712
3

Gratuluje podbicia do wersji, która ma tylko 2 lata i nie jest supportowana.
tu się wysypuje to nie jest opis błędu.

Napisz jak się wysypuje. Co widzisz?

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

Odpuść mi proszę kąśliwości. Projekt jest dosyć stary. Przyczyną aktualizacji była dziura bezpieczeństwa w tomcacie. Wersja springa, którą zastosowałem wymagała najmniejszych zmian w kodzie. Z wyższa wersją projekt "wariuje", wymaga wielu zmian i zapewne bym sobie z nimi nie poradził.

W wyniku wykonania metody jsonPath z poniższego wiersza

Kopiuj
.andExpect(jsonPath(prefix + "[*].object[?(@.username == 'sb')].password").value("sbspass");  <- tu się wysypuje

generowany jest wyjątek przez matcher:

java.lang.AssertionError: No matching value at JSON path "$.accAccessOSSs[?(@.object.vendor.name == 'Ericsson')][*].object[?(@.username == 'sb')].password"

W starszej wersji spring boot (1.2.3.RELEASE) skrypt działa poprawnie i test przechodzi. Wrzuciłem dane i skrypt do toola online (jsonpath.com) i również nie zwraca spodziewanych wyników. Skrypt, który stworzyłem w toolu i zwraca spodziewany wynik też nie działa w metodzie jsonPath. Już nie mam więcej pomysłów jak się za to zabrać.

Powtórzę pytanie: czy istnieje sposób aby podejrzeć wyniki filtrowania danych przez metodę jsonPath?

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4712
1

jsonPath to niestety matcher - raczej się nie da tego wygodnie podejrzeć.
Ale dokładnie dobrze robisz - skoro jsonpath w zewnętrznym narzędziu też nie działa, to pewnie jest błędny. Może jsonPath był zrypany w starszej wersji springa.
IMO trzeba te query poprawić (ale nie znając jsona nie wiem na jakie).

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

Znalazłem jeszcze jedno narzędzie (jsonpath.herokuapp.com) i zwraca inne wyniki od jsonpath.com dla tych samych danych.

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2787
2

jsonPath to masakra (jak przestaje działać), lepiej zdeserializować response na jakiś obiekt javowy i normalnie sprawdzać getami. Jak masz dużo pól, to zawsze można użyć na coś JsonNode.

bolson
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Zielona Góra
1

Jaką wersję json-patha masz? Mieliśmy ostatnio podobny problem po podbiciu springowych bibliotek i po dłuższej inwestygacji wyszło ze w którejś z libek była wersja json-patha z bugiem. Pomogło dorzucenie do projektu najnowszej wersji json-patha.

YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2384
3

Sprawdź sobie czy w tzw. międzyczasie nie został wprowadzony ficzur do jsonPath matchera, który np. wprowadza rozpoznawanie wielkości liter w kluczach jsona.
W starej wersji mogłoby działać, a w nowej może jest już case sensitive.

Ślepy strzał to dodanie application properties: spring.jackson.mapper.accept-case-insensitive-properties=true, ślepy więc jak nie działa, to trudno ;)

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

@bolson: Załadowała się wersja 2.2.0.

damianem
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 205
0

W jaki sposób mogę zapisać do logów rezultat działania metody jsonPath

Takie problemy rozwiązuje się w taki sposób, że patrzysz jakie exception leci a następnie zapinasz się debugerem w miejscu gdzie jest rzucane - w kodzie frameworka jeśli trzeba. Patrzysz co powoduje rzucanie exceptiona i wędrujesz w górę stacka żeby dowiedzieć się skąd się to wzięło (w Twoim przypadku jaki JSON dostajesz). W debugerze możesz wykonać na przechwyconych danych query jsonpath i próbować je naprawić / zmienić.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2

Ja bym jednak mocno sugerował zmapować odpowiedź na jakieś DTO i sprawdzać po ludzku te pola, bo takie matchowanie na kolanie zawsze będzie powodować jakieś problemy

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

Ogólnie poradziłem sobie z podstawowym problemem i udało mi się dotrzeć do wyników filtrowania danych. Napotkałem jednak problem przy weryfikacji wyników. Jest taki fragment kodu:

Kopiuj
resultActions.andExpect(jsonPath(prefix, equalTo(null)));

Generuje on wyjątek:
java.lang.AssertionError: JSON path "$.accAccessOSSs[?(@.object.vendor.name == 'ZTE')][?(@.object.name == 'OSS_Z1')].object.accNEsUnderOSS[?(@.name == 'BSC4')].additionalParamsList"
Expected: null
but: was <[null]>

Gdy zmieniłem parametr dla equalTo:

Kopiuj
resultActions.andExpect(jsonPath(prefix, equalTo(nullValue())));

to wygenerowany został wyjątek:
java.lang.AssertionError: JSON path "$.accAccessOSSs[?(@.object.vendor.name == 'ZTE')][?(@.object.name == 'OSS_Z1')].object.accNEsUnderOSS[?(@.name == 'BSC4')].additionalParamsList"
Expected: <null>
but: was <[null]>

Który matcher powinienem zastosować aby poprawnie zweryfikował wynik?

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

Już sobie poradziłem. Dziękuję za pomoc.

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.