gpt4 book ai didi

java - Spring Rest Controller 的模拟主体

转载 作者:搜寻专家 更新时间:2023-11-01 02:20:34 25 4
gpt4 key购买 nike

我有以下 REST Controller :

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

CustomUserDetails 有很多字段,包括 usernamepassword

我想在 Controller 方法中模拟主体(或从测试传递到 Controller 方法)。我应该怎么做?我看了很多帖子,但没有一个真正回答这个问题。

编辑 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);
}

使用这种方法,您的 Controller 方法将接收 Principal 的模拟实例。我已经在本地验证了这种行为。

关于java - Spring Rest Controller 的模拟主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45561471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com