#java
Mam pytanie. Posiadam taką klasę pomocniczą do testów:

@Component
public class SessionChecker {

private final DataSource dataSource;

public SessionChecker(DataSource dataSource) {
this.dataSource = dataSource;
}

public boolean checkExistence(String sessionId) {
try {
String query = "SELECT COUNT(*) FROM sessions WHERE session_id = ?";

try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(query)) {

statement.setString(1, sessionId);

ResultSet resultSet = statement.executeQuery();

return resultSet.next() && resultSet.getInt(1) > 0;
}
} catch (SQLException e) {
@Kamishimi: Jeżeli to jest klasa która będzie dostępna tylko w Twoim katalogu z testami, to pewnie może być. Jeżeli natomiast miałaby być dostępna w głównym kodzie no to tak średnio bo całkowicie tracisz type-safety w tym miejscu. W miejscu drugiego parametru można przekazywać wtedy dosłownie wszystko i kompilator się nie zająknie.

Zamiast tego na Twoim miejscu celowałbym w sygnaturę private boolean checkExistence(String query, PreparedStatement statement). Wtedy każda z publicznych metod
  • Odpowiedz
@Kamishimi: Może:

checkExistence(String query, Consumer<PreparedStatement> propertySetter) {
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(query)) {
propertySetter.accept(statement);
ResultSet resultSet = statement.executeQuery();
return resultSet.next() && resultSet.getInt(1) > 0;
} catch (SQLException e) {
throw new RuntimeException("Error during checking existence: " + e.getMessage(), e);
}

public boolean userHasActiveSession(int userId) {
String query = "SELECT COUNT(*) FROM sessions WHERE user_id = ?";
return checkExistence(query, st -> st.setInt(1, userId));
}

public boolean sessionExist(String sessionId)
  • Odpowiedz
#programowanie #pracait #java
Mam w #!$%@? dziwny problem z testami jednostkowymi w groovy, odpalam jakikolwiek test i wywala mi atki blad. Robilem juz wszystko, cache, update ide do najnowszych, grzebalem w configu project structure tez wydaje sie byc okej. Ma ktos jakis pomysl co to moze byc? Dodawałem do poma rozne zaleznosci i bez zmian. Na masterze czy devie jest to samo, no ręce rozkladam juz po prostu (
staley - #programowanie #pracait #java
Mam w #!$%@? dziwny problem z testami jednostk...

źródło: Zrzut ekranu 2024-03-28 142919

Pobierz
✨️ Obserwuj #mirkoanonim
Co trzeba umieć, żeby dostać się na staż z javy, albo chociaż DARMOWE praktyki w jakimś januszexie? Muszę odbyć praktyki na studiach, a obecna sytuacja na rynku jest przynajmniej godna pożałowania. W ciągu ostatniego miesiąca chodziłem na targi pracy i ofert było tyle co kot napłakał, zostawiłem CV o ile w ogóle na to pozwalali, oczywiście zero odzewu. Mam świadomość, że projekty w moim portfolio nie są najlepsze na
Dlaczego przy teście serwisu leci LazyInizializationException a przy teście kontrolera już nie i przechodzi normalnie mimo, że też korzysta z tego serwisu?

@test
void testService() {
var film = filmRepository.save(createFilm());
var hall = hallRepository.save(createHall());
screeningRepository.save(createScreening(film, hall));

screeningService.getAllScreenings();
}

@test
void testController() {
var film = filmRepository.save(createFilm());
var hall = hallRepository.save(createHall());
screeningRepository.save(createScreening(film, hall));

webTestClient
.get()
.uri("/public/screenings")
.exchange()
.expectStatus()
.isOk();
}

#java #programowanie #naukaprogramowania #programista15k
strzelam, że tutaj dlatego że tworzysz te obiekty na potrzebę testu a tam ich może nie być ale w sumie nie wiem bo widzę tylko wycinek kodu


@Smonk_Da_Wead: Mam dwie refleksje. Naprawdę używacie chat gpt żeby rozwiązywać takie problemy? Przecież ich rozwiązywane to najlepsza droga aby się rozwijać i zrozumieć jak działa stack technologiczny w którym pracujemy. Znalezienie przyczyny tego problemu da więcej wiedzy niż przeczytanie niejednej książki. W drugiej kwestii
  • Odpowiedz
Pracuje ostatnio z takimi półgłowkami w #java
Trochę po nich sprzątałem i robiłem refaktor. Wydzielilem z repozytorium interfejs, żeby go używali i dało się to testować.
I taki jeden miał zrobić implementacje InMemory na potrzeby testów.
I co zrobił? Zamiast zaimplementować nowy interfejs, to podklasowal istniejąca implementacje i nazwał ją InMemory. Napisał wszystkie metody. Do konstruktora powkladal nulle w testach i Elo. Testy przechodzą.

#programista15k #programowanie
@Goddy: a jaki był problem z testowaniem na docelowym repozytorium, że musicie tak rzeźbić? W ten sposób jak będziecie mieć buga w obsłudze repozytorium lub integracji z nim to wam się testy nie zaświecą na czerwono.
  • Odpowiedz
@Nofenak: kiedyś byłem bardzo przeciwny lombokowi, ale jak zacząłem korzystać, to nie mogę już bez niego żyć.

Nie daje do każdego projektu, ale często korzystam.

Ja rozumiem, że wszystko to co robi lombok jesteś w stanie wygenerować dwoma kliknięciami.

Problem pojawia się, kiedy coś prototypujesz, rozpoznajesz temat i pracujesz na ciągle zmieniającym się kodzie. Wtedy te wszystkie gettery, buildery, equalsy/haszkody mocno spowolniaja zmiany. A tak - z lombokiem jak chcę wywalić,
  • Odpowiedz
@biaukowe: To i tak jest nic, jak teraz ja mam 6 lat expa i obawiam się o przyszłość bo jest tyle Javowców i konkurencja. Wiem, że można gadać, że jak ktoś jest dobry to zawsze coś znajdzie, ale to jest trochę takie p13rdolenie.
  • Odpowiedz
Siema Mirasy.

Potrzebuje, aby ktoś koncepcyjnie potwierdził lub zaprzeczył, czy taki prosty scenariusz jest wykonalny:

1) Mam lambdę (kotlin/quarkus)
2) Lambda nasł#!$%@? na SQSEvent
3) Potrzebuje napisać test integracyjny, który odpali mi logikę lambdy i który sprawdzi, czy zfailowane wiadomości podczas ich przetwarzania polecą na DLQ
4) Lambda zwraca typ SQSBatchResponse i póki co na sztywno failuje wiadomości

Czy koncepcyjnie jest to w ogóle wykonalne? Quarkus ma wbudowanego LocalStacka i nie widzę,
@Yeboy wiadomości idą na dlq jeśli w czasie visibility timeout nie zostały usunięte z głównej kolejki. Dla aws nie ma znaczenia czym to czytasz i jak przetwarzasz. Jeśli nie usuniesz to idzie to dlq jeśli masz redrive policy
  • Odpowiedz
Cześć,
Potrzebuję rady.
Szukam od jakiegoś czasu pracy jako programista Java za granicą i przyznam że mam już dosyć.
Wysyłam CV do Hiszpanii bo mówię po hiszpańsku, ale też do Niemiec i Austrii, chociaż niemiecki znam srednio.
I nic, mialem dwie rozmowy z Hiszpanii, z czego jedna to "jako zadanie rekrutacyjne zrób projekt, zajmie tylko kilka godzin". Z Niemiec jedna rozmowa i zadanie rekrutacyjne jak w Hiszpanii.
Odrzucają kandydaturę bez rozpatrzenia po
@tolman123 masz hiszpańskie dokumenty, tj. numer NIE? No bo jak nie to się nie dziwię że cię nie chcą przyjąć, nikomu się nie chce w to bawić jak tylu jest bezrobotnych na miejscu
  • Odpowiedz
@bart1234: jak długo siędzę w IT tak jeszcze nigdy nie było tak źle. ci co twierdzą, że jest inaczej to pewnie siedzą w jakiś zakontraktowanych na 10 lat projektach i nie próbowali jeszcze szukać roboty w popularnym stacku. 130CV poszło, może 15 spotkało się z odpowiedzią a finalnie może z 10 to była konkretna rozmowa techniczna po której nigdy nie dostałem feedbacku. poza tym nigdy wcześniej nie dostawałem zwrotek, że przyjmowanie
  • Odpowiedz
Mam w swojej aplikacji trzy role i chciałbym przetestować czy zostanie zwrócony odpowiedni błąd jeśli użytkownik nie ma roli admina i próbuje strzelić na endpoint dla admina. W testach mam porobione metody np. sendRequestAsUser, która wyciąga użytkownika z rolą USER z bazy, generuje JWT i zwraca token jako String. Pierwsze co przyszło mi do głowy to napisanie testu sparametryzowanego żeby nie powtarzać kodu, ale tutaj pojawia się problem, bo do adnotacji MethodSource
W gwoli jasności, to możliwe jest przekazanie niestatycznej metody do @MethodSource zmieniając cykl życia testu adnotacją - @TestInstance(PER_CLASS).

Możliwe, że twoją weryfikację da się zrealizować jeszcze łatwiej (bez bazy danych). Z MockMvc mogłoby to wyglądać w następujący sposób: mockMvc.perform(get(...).with(SecurityMockMvcRequestPostProcessors.user().roles(Role.ADMIN))
więc @MethodSource mógłby parametryzować Role albo cały RequestPostProcessor. Tutaj będzie zwykły Springowy User ale tych RequestPostProcessor jest sporo (są też związane z OAuth2).

Jeżeli chcesz WebTestClient to tam to się nazywa
  • Odpowiedz
  • 0
@Smevios:

Ta adnotacja @TestInstance(PER_CLASS) może mi się przydać, dzięki.

Zrobiłem sobie sparametryzowany test z wykorzystaniem MockMvc i w sumie działa to okey. Są zwolennicy używania MockMvc, jak i są przeciwnicy. Ja jeszcze nie zagłębiałem się w problemy z używania tego.

mockMvc.perform(get("/api/v1/admin/users").with(user("test").roles(role)))
.andDo(print())
.andExpect(status().isUnauthorized());

Chcę jeszcze sprawdzić to drugie rozwiązanie z wykorzystaniem WebTestClient i rozumiem, że masz na myśli przekazywanie obiektu typu UserDetails do metody mockUser()?

webTestClient.mutateWith(mockUser().roles(role))
.get()
.uri("/api/v1/admin/users")
.exchange()
  • Odpowiedz