使用 powermokito 模拟静态 Spring 引导控制器方法
mocking a static Spring boot controller method with powermokito
我的 Spring 引导控制器方法之一调用静态方法。我想使用 powermokito 测试控制器。
在下面找到相同的代码。
我在尝试调用 mockMvc.perform() 方法时遇到错误
@RunWith(PowerMockRunner.class)
@PrepareForTest({StaticClass.class})
public void StaticClassTests()
{
@Autowired
private MockMvc mockMvc;
@Test
public void testStatic()
{
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
PowerMokito.when(StaticClass.getList()).thenReturn(list);
RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/getlist")
.accept(MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(requestBuilder) //where the error is
.andExpect(status().isOk())
.andExpect(content().json("[\n" +
" \"a\",\n" +
" \"b\",\n" +
" \"c\"\n" +
"]"))
.andReturn();
}
}
StaticClass.getList() 是静态方法
我在注释行得到 java.lang.NullPointerException(即 mockMvc.perform(requestBuilder))
你应该在调用 perform 方法之前初始化 mockMvc。
// Setup Spring test in standalone mode
this.mockMvc = MockMvcBuilders.standaloneSetup(carSearchController).build();
注意:
像这里一样为 CarSearchController
注入你的控制器
@InjectMocks
private CarSearchController carSearchController;
我的 Spring 引导控制器方法之一调用静态方法。我想使用 powermokito 测试控制器。 在下面找到相同的代码。 我在尝试调用 mockMvc.perform() 方法时遇到错误 @RunWith(PowerMockRunner.class)
@PrepareForTest({StaticClass.class})
public void StaticClassTests()
{
@Autowired
private MockMvc mockMvc;
@Test
public void testStatic()
{
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
PowerMokito.when(StaticClass.getList()).thenReturn(list);
RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/getlist")
.accept(MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(requestBuilder) //where the error is
.andExpect(status().isOk())
.andExpect(content().json("[\n" +
" \"a\",\n" +
" \"b\",\n" +
" \"c\"\n" +
"]"))
.andReturn();
}
}
StaticClass.getList() 是静态方法 我在注释行得到 java.lang.NullPointerException(即 mockMvc.perform(requestBuilder))
你应该在调用 perform 方法之前初始化 mockMvc。
// Setup Spring test in standalone mode
this.mockMvc = MockMvcBuilders.standaloneSetup(carSearchController).build();
注意: 像这里一样为 CarSearchController
注入你的控制器 @InjectMocks
private CarSearchController carSearchController;