Wpis z mikrobloga

#programowanie #java
Cze,
Mam pewien problem z mockowaniem serwisu w moim teście (dopiero zaczynam zabawę z mockito). Sytuacja wygląda tak, mam serwis który w sobie ma kilka innych serwisów (wstrzykuje za pomocą @autowired). Klasa testowa ma takie anotacje:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration

Mam coś takiego w beforze:

@Before
public void init() {
mocktockDetailsWebParser = Mockito.mock(StockDetailsWebParser.class);
when(mocktockDetailsWebParser.getStockNameFromWeb(anyObject())).thenReturn("AAA AAA");
ReflectionTestUtils.setField(stockTickerUpdater, "detailsParser", mocktockDetailsWebParser);

I niestety to nie działa, pomimo wywołania metody getStockNameFromWeb, wywołana jest metoda serwisu a nie mojego mockowanego obiektu. Da się jakoś wymieszać spring injection z mockowaniem? Bo chciałbym, aby pozostałe serwisy korzystały z własnych implementacji a tylko dla tego jednego użyć mockowania.
  • 6
@BigAngryPenguin: Dobra już mam. Nie było tematu :) Po prostu tworze sobie obiekt mojego serwisu nie używajac spring injection. Ale do samego tekstu wstrzykuje sobie serwisy ktore sa potrzebne dla mojego glownego serwisu i je ustawiam przez ReflectionTestUtils wiec wtedy maja domyslna implementacje. A te które potrzebuje zamockowac mockuje i tak samo ustawiam przez ReflectionTestUtils.
@pulla
jeśli dobrze rozumiem co chcesz uzyskać, to stwórz inner-class z anotacją @Configuration, która tworzy twoje mockowe beany używając @Bean. Powinny one być bezpośrednio wstrzyknięte do testowanego serwisu i do samego testu, żebyś mógł je w @Before odpowiednio skonfigurować.