Jak w springu przetestować metodę saveSomething(ids...) w jakimś {User/Group/Whatever}Service.java, która wykonuje jakąś logikę z warunkiem if-else i potem za pomocą obiektu repository zapisuje obiekt w bazie?

Nie zwracam w tej metodzie nic bo ten obiekt zapisuje w jakiejś większej grupie obiektów, więc zwracanie listy zaktualizowanych obiektów nie ma sensu.

Jedyne co mi przychodzi do głowy to przetestować czy obiekt repository wywołał metodę save w zależności od argumentów metody. Czyli verify(sometService, times(1)).someMethod();

Mówię
Mireczki projektując rest api w springu, przy mappingu i przy zwracaniu ResponseEntity w metodzie kontrolera oprócz consumes i produces co jeszcze powinno się znaleźć?
1. Location do utworzonego zasobu?
2. UserAgent?
3. Domyślna wartość Pagination? - czy muszę wtedy tworzyć osobne klasy opakowujące metody pobierające produkty z bazy? Czy wystarczy, że tę wartość mogę przekazać jako parametr do metod pobierających produkty z bazy?

Pierwszy raz się tym bawię i chciałbym wiedzieć jaka
@famir96: W zależności od tego, co projektujesz, mogą, aczkolwiek nie muszą być dodatkowe wymagania. Nie ma wymagań, to tylko gdybanie. Tak, jakbyś się pytał, jak wybudować biuro, nie podając żadnych informacji o działce, którą dysponujesz czy budżecie.

Ad.1 nie, chyba że robisz coś, co coś zapisuje, tworzy, buduje, generuje. Równie dobrze, możesz przekazać URL, czy ten zasób w odpowiedzi. Chyba że nie możesz, bo w wymaganiach jest, by przekazać nagłówkiem ;)
@Yakooo: a musisz to pisać? To czy Spring używa singletonów czy nie to śliski temat. Springowe beany są singlentonami na poziomie Springa a nie na poziomie programu, nikt mi nie broni, żeby popełnić taką zbrodnię jako new KlasaKtoraPowinnaBycSingletonem()
Kiedyś właśnie osoba która pisała pracę mówiła że dobrze opisać jakieś wzorce,


@Yakooo: co nie napiszesz to będzie dobrze. Z mojego otoczenia nikt nie opisywał wzorców
Jeśli piszę testy do restowego api to pisać oddzielnie 1 test do sprawdzenia czy controller zwraca odpowiedni status i 2 test do sprawdzenia zwracanego contentu?
Pierwszy miałby formę np.

@Test
void processCreationBook() throws Exception {
mockMvc.perform(get("/books"))
.andExpect(status().is2xxSuccessful());
}

I byłby w klasie BooksControllerIT.

A drugi test, sprawdzający zwracany content w BooksControllerTest.

Ma to sens? W przypadku posta w każdym z tych testów musimy załączyć utworzony obiekt więc mam wrażenie, że 2x robię
@Yakooo: mowa o heroku, nie o Twoim programie. Tu masz wbudowanego Mavena, i on działa na tym JDK którego wybrałeś sobie w module settings. Jak chcesz to możemy się zgadać pokaże Ci co i jak
@Yakooo: chodziło mu o spakowanie projektu, podlinkowanie, by móc go uruchomić i zobaczyć czy nie ma błędów.

To, że Intellij podkreśla, nie znaczy, że to zły properties. Intellij często różne rzeczy podkreśla, które są w porządku.

Propsy, które potrzebujesz:

# Adres URL bazy danych H2
spring.datasource.url=jdbc:h2:file:./BazaDanych1
# Sterownik JDBC dla bazy danych H2
spring.datasource.driver-class-name=org.h2.Driver
# Nazwa użytkownika bazy danych
spring.datasource.username=sa
# Hasło użytkownika bazy danych
spring.datasource.password=
# Dialekt języka SQL dla
@Yakooo: dialekt, to szczegóły w implementacjach baz. Np. w Mysql jak chcesz ograniczyć wynik do 1 rekordu, to po zapytaniu dodajesz "limit 1", np.: select * from User limit 1; ale już w oracle masz rownum. To samo dla oracle: select * from User where rownum <= 1;
Niby jedna i druga baza używa SQL, ale są różnice i te różnice to właśnie dialekt.

Jak nie podasz dialektu, to może
Czy to, że zapis do double lub long jest nieatomowy ma jakiekolwiek znaczenie skoro i tak jeśli taka zmienna jest zmienna i współdzielona to trzeba ją zsynchronizować czy tam zvolatilalizować?
Jakiś przykład?

no chyba, że final double x = 2.0; przy odczycie może dawać różne wyniki? no chyba nie...

A inicjacja obiektów, które mają atrybuty np. int te nie jest atomowe se, jeśli atrybuty nie sá final?

https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html

#java #programowanie
dość że możesz otrzymać nieaktualną wartość to co więcej możesz uzyskać liczbę która nigdy nie została tam zapisana(bo odczytasz częściowo zaktualizowaną wartość)


@aczutuse: Jak napisałem wyżej, w przypadku inta dostaniesz nieaktualną wartość, w przypadku longa możesz dostać część bitów ze starszej wartości i część z nowszej - czyli coś co nigdy nie zostało zapisane.
@63274682374: Aby tego uniknąć, ogólnie wystarczy przepuścić kod przez jakiś linter (np. ten wbudowany w IntelliJ), który wyłapie najczęstsze sytuacje, gdy pole finalne jest odczytywane przed inicjalizacją:
– wywołania metod w konstruktorze, zwłaszcza jeśli są to metody nieprywatne niefinalne, bo nie kontrolujesz ich nadpisań
– dla pól statycznych, cykliczne zależności między klasami
Weź np. taki kod: class A { final int x; A(){ foo(); x = 1; } void foo() {System.out.println(x);}}
Jak mam dwie klasy Entity powiązane ze sobą dwukierunkową relacją ManyToMany np. User i Discount to dobrym pomysłem będzie dorobienie pola w klasie User: Map?

Potrzebuję wiedzieć czy jest aktywna zniżka czy nie. A jak zmienię pole isActivated w bazie na dowolnym obiekcie Discount to będzie to zmiana widoczna dla wszystkich użytkowników, którzy korzystają z tej zniżki, a ja chcę tylko dla jednego usera. ( ͡° ʖ̯ ͡°)
takiMirek29 - Jak mam dwie klasy Entity powiązane ze sobą dwukierunkową relacją ManyT...

źródło: comment_1672406366yzXDsx5yplhxx5HKFEldfe.jpg

Pobierz
Za moment Nowy Rok, a z nim zmiany. A ze zmianami oferty z najwyższymi widełkami ( ͡° ͜ʖ ͡° )*:https://bit.ly/3FWfO0M

Szczęśliwego Nowego roku. Widzimy się w poniedziałek ( ͡° ͜ʖ ͡°)

#justjoinit #programowanie #programista15k #programista25k #pracait #technologia #javascript #css #html #python #java #php #ciekawostka #programista100k #praca #pracait #programista #praca #justjoinitoferty
JustJoinIT - Za moment Nowy Rok, a z nim zmiany. A ze zmianami oferty z najwyższymi w...

źródło: comment_1672391432xAoEoDRrIGWK9fbf4kadPN.jpg

Pobierz
@novak00: poza akademickim rozciąganiem mózgu (tudzież na rekrutację) red-black trees nie mają sensu gdzieś od 20 lat albo więcej. Podobnie jak listy łączone. B+ drzewa są pod każdym praktycznym względem lepsze (tak, wiem że zaraz ktoś wyskoczy z jakimś niszowym zastosowaniem gdzie RB drzewa mają sens, podobnie jak listy, ale nigdy nie powinny być domyślną struktura).
Hej, uczę się streamów, dostaję listę id userów List userIds i chciałbym pobrać z bazy userów po id i stworzyć z tego listę.

userIds.stream().map(id -> userRepository.findById(id)) no i teraz jak daję .collect(Collectors.toList()); to zwraca mi List>

Co najlepiej zrobić tutaj?

#java #naukaprogramowania
Mireczki od javy 8+
Mam sobie service WypokService za pomocą którego pobieram obiekt Optional, który zawiera zbiór Set i teraz chcę zwrócić zbiór użytkowników, którzy mają pole activeuser=true, nie czepiajcie się implementacji, wymyśliłem to na potrzeby streamow
jak to zrobić streamami? bo ten optional przy wypoku mi troche miesza

zaczalem tak:
Set users = WypokService.getWypokById(id).map(wypok -> wypok.getUsers).orElse(new HashSet<>());
to mi zwraca liter userow, ale bez filtra, niestety nie udaje mi sie tego
zaczalem tak:

Set users = WypokService.getWypokById(id).map(wypok -> wypok.getUsers).orElse(new HashSet<>());


@famir96: Jak dostajesz Optional, to .get().orElse(new HashSet<>), pozbyłeś się Optionala, masz już 'czysty set', więc jedziesz .stream na nim .map, a później .filter.
Mam problem z cykliczną zależnością referencji w hibernate tzn. przykładowo mamy dwie klasy autor (posiada pole set), z adnotacja manyToMany i przy pobieraniu jakiegos autora wywala blad bo przez metode toString mamy cykliczna zaleznosc. Dalem jsonignore na te pola, ale co mi z tego jak ja chce zwrocic pelen obiekt razem z tymi polami. Jak to zrobic?

amatorski picrel
#java #hibernate #spring #naukaprogramowania
nick230 - Mam problem z cykliczną zależnością referencji w hibernate tzn. przykładowo...

źródło: comment_16723132476Py2lH6WOTAGD1yafCfdLH.jpg

Pobierz
@nick230: W toString powinny być tylko i wyłącznie pola należące do tej encji, bez dociągania zależności z innych. Pchasz się w N+1.... Nie panujesz nad wykonywanym zapytaniem. Włącz wypisywanie zapytań hibernate w konfiguracji springa.