2016-07-08 2 views
0

これは私Mockitoテストされて使用して呼び出されたことを確認する方法はあります:春コントローラのメソッドがMockito

は今、私の質問は、ある
@RunWith(MockitoJUnitRunner.class) 
public class Controller_Test { 

    private MockMvc mockMvc; 

    @InjectMocks 
    private EmployeeController employeeController; 

    @Mock 
    private InputValidationService inputValidationService; 

    @Before 
    public void setup() { 
     MockitoAnnotations.initMocks(this); 
     this.mockMvc = MockMvcBuilders.standaloneSetup(restController).build(); 

    } 

    @Test 
    public void testGetEmployeeDetails() { 

     EmployeeController spy = Mockito.spy(employeeController); 
     MvcResult result = mockMvc.perform(get("/employee/details/9816")).andDo(print()).andExpect(status().isOk()).andReturn(); 

    // Have some basic asserts here on the result that are working fine 


    } 


    } 

方法は、私があることを期待することを主張する方法はあります私のコントローラーで呼ばれて実際に呼び出されました。

私はそれがあったけど、どのように私は、例えばのためのユニットテスト

でそれを主張します これは、コントローラの私のRequestMappingです:

@RequestMapping(value = "/employee/details/{id}", produces = "application/json; charset=UTF-8", method = RequestMethod.GET) 
    @ResponseStatus(HttpStatus.OK) 
    @ResponseBody 
    public EmployeeDetails getEmployeeDetailsById(@PathVariable String employeeID) { 

    //Some business logic 

    } 

今、私のようないくつかの主張をしたいと思い:

Mockito.verify(spy, times(1)).getEmployeeDetailsById(); 

だから、基本的に、私は私が呼び出されると予想する方法があったことを主張したいと思います1つは呼ばれた。私はこれが私が持っているモックサービスオブジェクト、すなわちinputValidationService上で行うことができますが、同様にコントローラのために同様のものを望むことを知っています。

投稿したい追加の詳細がある場合はお知らせください。

+0

これは、MockMvcを使用する方法ではありません。レスポンスを検証(マッチング)する必要があります。 –

+1

@SotiriosDelimanolis私はそれを取得し、私は応答にも主張している。しかし、同じ結果を返す複数のマッピングがあります。そして私が言ったように私は、呼び出されると期待されるメソッドが呼び出されているのを見て他の主張を持っていますが、正しいマッピングがMockitoによって直接呼び出されたと主張できる方法があるかどうかを知りたがりました。私はMockMvcの使用方法を心配していませんが、これは技術的に可能かどうかのような質問です。 –

答えて

1

が、私は、適切なコントローラおよび方法を確認することができorg.springframework.test.web.servlet.result.HandlerResultMatchersが求められていました。例:

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.handler; 

    mockMvc 
     .perform(get("/employee/details/9816")) 
     .andExpect(handler().handlerType(EmployeeController.class)) 
     .andExpect(handler().methodName("getEmployeeDetailsById")); 
関連する問題