使用 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;