Для тестирования я использую MockMvc для отправки POST-запроса к контроллеру, и я хотел бы смоделировать конкретный вызов службы, чтобы он ничего не делал (с Mockito.doNothing()). Если я вызываю этот метод в @Test, он работает отлично, и метод не вызывается. Проблема возникает, когда я делаю mockMvc.perform(..) и выполнение попадает в контроллер, метод doNothing() игнорируется и функция выполняется. Я запускаю тесты Spring MVC в WebApplicationContext.
Это установка:
@Mock
private MyService myService;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
Эта часть работает. Когда вызывается myFuncToIgnore(), он пропускается.
@Test
public void myTest() throws Exception {
Mockito.doNothing().when(myService)
.myFuncToIgnore(isA(String.class), isA(String.class));
myService.myFuncToIgnore("", "");
}
Эта часть не работает. Когда mockMvc вызывает контроллер, выполняется блок. Обратите внимание, что контроллер вызывает интерфейс, реализация которого вызывает MyService, который представляет собой интерфейс с имплементом, называемым MyServiceImpl). Вот код:
mockMvc.perform(
post(serviceContextPath)
.contentType(MediaType.APPLICATION_JSON)
.header("X-Request-Language", "en"))
.andDo(print())
.andExpect(status().isOk())
.andReturn();
У вас есть предложения, пожалуйста?
<bean id="myService" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target"> <bean class="org.mockito.Mockito" factory-method="mock"> <constructor-arg value="com.foo.bar.MyService" /> </bean> </property> <property name="proxyInterfaces"> <array> <value>com.foo.bar.MyService</value> </array> </property> </bean>
это объявляет MyService, который является макетом - person   schedule 08.11.2017@Bean("myService") private ProxyFactoryBean foo() { ProxyFactoryBean pfb = new ProxyFactoryBean(); pfb.setTarget(Mockito.mock(MyService.class)); pfb.setProxyInterfaces(new Class[]{MyService.class}); return pfb; }
, чтобы быть эквивалентным - person   schedule 09.11.2017