簡體   English   中英

Spring Rest控制器的Mock Principal

[英]Mock Principal for Spring Rest controller

我有以下REST控制器:

@RequestMapping(path = "", method = RequestMethod.GET)
public ExtendedGetUserDto getCurrentUser(Principal principal) {
    CustomUserDetails userDetails = userDetailsService.loadByUsername(principal.getName())
    // .....
}

CustomUserDetails有許多字段,包括usernamepassword

我想在控制器方法中模擬主體(或從測試傳遞到控制器方法)。 我該怎么辦? 我讀了很多帖子,但他們都沒有回答這個問題。

編輯1

@Test
public void testGetCurrentUser() throws Exception {

    RequestBuilder requestBuilder = MockMvcRequestBuilders.get(
            USER_ENDPOINT_URL).accept(MediaType.APPLICATION_JSON);

    MvcResult result = mockMvc.perform(requestBuilder).andReturn();

    MockHttpServletResponse response = result.getResponse();
    int status = response.getStatus();
    Assert.assertEquals("response status is wrong", 200, status);
}

您可以在測試用例中模擬一個主體,對它設置一些期望,然后使用MockHttpServletRequestBuilder.principal()將該模型傳遞給mvc調用。

我已經更新了你的例子:

@Test
public void testGetCurrentUser() throws Exception {
    Principal mockPrincipal = Mockito.mock(Principal.class);
    Mockito.when(mockPrincipal.getName()).thenReturn("me");

    RequestBuilder requestBuilder = MockMvcRequestBuilders
        .get(USER_ENDPOINT_URL)
        .principal(mockPrincipal)
        .accept(MediaType.APPLICATION_JSON);

    MvcResult result = mockMvc.perform(requestBuilder).andReturn();

    MockHttpServletResponse response = result.getResponse();
    int status = response.getStatus();
    Assert.assertEquals("response status is wrong", 200, status);
}

使用此方法,您的控制器方法將接收模擬的Principal實例。 我已在本地驗證此行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM