Podwójne utworzenie beana - dziwne zachowanie na Jenkinsie

0

Hej, mam taki case. Mam beana z adnotacją @Component, który zawiera w sobie ArrayBlockingQueue. Jest on użyty w Springowym RESTowym kontrolerze oraz w pewnym serwisie.

Mam sobie test integracyjny gdzie uderzam do tego kontrolera, dodaje mi się kilka elementów do tego ArrayBlockingQueue, a następnie wołam metodę bezpośrednio na tym beanie w teście, która ma mi te elementy pobrać (bean jest sobie wstrzyknięty do testu) - no i lokalnie wsio działa.

Na jenkinsie ten bean w ogóle nie ma elementów.

Do konstruktura beana dodałem generowanie UUID i po logach widzę, że tworzone są 2 instancje tych beanów :O
Wie ktoś może o co chodzi?

1

Niejasno napisałeś. Czy to się dzieje w jednym teście?

0

@jarekr000000:

Ok mamy stacktracy. W obu przypadkach są identyczne. Nie wiem czego szukać, ale po kolei idzie, ForkedBooter, JUnitPlatformProvider, SpringExtension, TestContextManager, SpringBootDependencyInjection, DependencyInjectionTestExecutionListener, DefaultTestContext, SpringBootContextLoader, AbstractBeanFactory - chyba taki standard. Wypisałem te ciekawsze .. chyba, że chcesz cały stacktrace.

1

To wystarczy. w jednym teście spring tworzy dwie instancje rego samego beana @Component.

Czyli: nie wiem. Nie wiem co należy zrypać, żeby osiągnąć taki efekt.

0

A jak dodasz @Scope("singleton")?

0

Jak puszczam ten test sam to tworzy 1 beana. Dopiero jak puszczam budowanie całego projektu z testami za pomocą mavena to tak się dzieje.

0

A nie masz tam jakiegoś @TestConfiguration które tworzy beana tej samej klasy tylko pod inną nazwą. Bo jakby w jednym kontekście były dwa beany tej samej klasy o tej samej nazwie to by było interesujące...
A jeśli nie @TestConfiguration to jakakolwiek inna forma dodatkowego setupu beanów do testów która z założenia miała nadpisać oryginalny config a literówka w nazwie spowodowała zduplikowanie?

0

Nic nie rozumiem z tego opisu :) Dodaj jakiegos loga w @PostConstruct, to bedziesz wiedzial, czy woła to Spring, czy może gdzies tworzysz instancje z palca. Pokaz kod tego beana i konfiguracji (produkcyjnej i testowej).

1

Mam sobie test integracyjny gdzie uderzam do tego kontrolera, dodaje mi się kilka elementów do tego ArrayBlockingQueue, a następnie wołam metodę bezpośrednio na tym beanie w teście, która ma mi te elementy pobrać (bean jest sobie wstrzyknięty do testu) - no i lokalnie wsio działa.

Czy "loklanie wsio działa" oznacza, że uruchamiasz testy via maven? I masz taką samą konfigurację pluginów testowych (np. izolacja testów) ? I nie masz separacji testów? I ten podwójny singleton nie jest (są?) różnych class loaderach / instancjach procesów JVM? (np. surefire + forkCount=42 i przypadkiem do tego samego loga leci info z konstruktorów wywołanych w odseparowanych testach?)

0
spyrx napisał(a):

Jak puszczam ten test sam to tworzy 1 beana. Dopiero jak puszczam budowanie całego projektu z testami za pomocą mavena to tak się dzieje.

A jak puszczasz ten jeden test? Bezpośrednio z IJ? A jak puścisz ten jeden test, ale maven'em, to też glebnie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1