2017-09-05 54 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驗證模擬對象的任何其他方法的測試
期間被稱爲