2017-09-05 13 views
0

我正在为我的Spring MVC控制器编写测试。 我得到一个org.Mockito.exception.verifications.NoInteractionWanted例外,该堆栈跟踪:Mockito - 这里没有任何交互异常

无相互作用想在这里: - >在com.test.TestInsertUtente.testInserimentoUtente(TestInsertUtente.java:124) 但发现这种互动: - >在com.test.UtenteForm.insertUtente(UtenteForm.java:149)

为什么?


public class TestInsertUtente { 

private MockMvc mockMvc; 

@Mock 
private UtenteService utenteService; 

@InjectMocks 
private UtenteForm utenteForm; 

@Before 
public void setUp() { 

    MockitoAnnotations.initMocks(this); 
    when(utenteService.insertUtente(isA(Utente.class))).thenReturn(new Utente("utente.test","utente","test","[email protected]","test",0)); 

    this.mockMvc = MockMvcBuilders.standaloneSetup(utenteForm).build(); 
} 

@Test 
public void testInserimentoUtente() throws Exception { 

    mockMvc.perform(post("/all/utente/form/insert/${action}","resta") 
      .contentType(MediaType.APPLICATION_FORM_URLENCODED) 
      .param("utente", "utente.test") 
      .param("nome", "utente1") 
      .param("cognome", "test") 
      .param("email", "[email protected]") 
      .param("password", "test") 
      .param("statoRecord", "0") 
      .sessionAttr("utente", new Utente()) 
    ).andExpect(status().isMovedTemporarily()) 
    .andExpect(view().name("redirect:/web/all/utente/form/utente.test/modifica")) 
    .andExpect(redirectedUrl("/web/all/utente/form/utente.test/modifica?insert=true")) 
    .andExpect(model().size(2)) 
    .andExpect(model().attribute("insert", equalTo(true))); 

    ArgumentCaptor<Utente> formObjectArgument = ArgumentCaptor.forClass(Utente.class); 
    verify(utenteService, times(1)).insertUtente(formObjectArgument.capture()); 
    verifyNoMoreInteractions(utenteService); 

} 
} 

回答

0

我不是测试insertUtente方法。我正在测试控制器。 我嘲笑utenteService对象,我希望它返回一个正确的Utente对象实例。

你的测试同时使用时,确认为同一电话:utenteService.insertUtente()

OK

在你的设置()告诉你的Mockito返回新Utente(” utente.test“,”utente“,”test“,”[email protected]“,”test“,0)当它被任何Utente实例调用时。

OK

但是你没有利用这种期望,即你没有断言这Utente实例返回或以其他方式在你的控制器使用。

好了我要补充这一说法

然后,在testInserimentoUtente()你验证utenteService.insertUtente()被调用,你捕获该调用传入的参数,但你不对所俘获论点的任何断言。

我删除了帖子中的断言,不要太长。

我建议应该有任何的期望时,或者根据您的控制器与utenteService.insertUtente的repsonse(),但是你并不需要同时当期望和验证断言做什么验证断言。如果你清楚地确定了对utenteService.insertUtente()的期望,那么我怀疑不再需要调用verifyNoMoreInteractions。

我的控制器对服务响应没有任何作用。 我称:

  • 验证以验证insertUtente方法只调用一次
  • verifyNoMoreInteractions验证模拟对象的任何其他方法的测试
期间被称为