即使实现了Stackoverflow答案也无法解析.andExpect()方法

时间:2018-10-12 10:02:28

标签: java spring-boot

我知道存在一个标题完全相同的问题,但答案对我没有任何帮助。

我正在使用WebMvcTest来测试我的控制器类。但是,当使用.andExpect比较结果时,我的IDEA(intellij)无法解决它。

与该解决方案标题相同的问题包含在我的导入文件中,并且未使用。我还查看了spring文档,并使用了所需的2种工具。

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

下面您将找到我的整个班级,在本例中是我的所有导入内容。

package be.pxl.backend.restapi;

import be.pxl.backend.restapi.controller.UserController;
import be.pxl.backend.restapi.domain.User;
import be.pxl.backend.restapi.manager.UserManager;

import org.junit.Test;
import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

import static org.hamcrest.Matchers.*;
import static org.mockito.BDDMockito.given;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

//stackoverflow try == unused
import org.springframework.test.web.servlet.ResultActions;


@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
public class UserControllerIntegrationTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private UserManager userManager;

    @Test
    public void givenUser_WhenGetUser_ThenReturnUser() throws Exception{
        User bjorn = new User();
        bjorn.setUsername("Bjorn");
        bjorn.setPassword("Wachtwoord");
        bjorn.setEmail("test@email.be");

        given(userManager.getUserById(1L)).willReturn(bjorn);

        mockMvc.perform(get("/user/1")
                .contentType(MediaType.APPLICATION_JSON)
                .andExpect(status().isOk())
                .andExpect(jsonPath("$", hasSize(1)))
                .andExpect(jsonPath("$[0].username", is(bjorn.getUsername()))));
    }
}

1 个答案:

答案 0 :(得分:0)

首先,根据Checkstyle,您应该avoid star imports。 其次,您放错了两个右括号,一个放在contentType()中,另一个放在最后一次调用andExpect()中。下面是一个工作代码。

进口

import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import be.pxl.backend.restapi.controller.UserController;
import be.pxl.backend.restapi.domain.User;
import be.pxl.backend.restapi.manager.UserManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

请注意,导入是按照Google Java Style进行排序的。

模拟测试:

mockMvc.perform(get("/user/1")
    .contentType(MediaType.APPLICATION_JSON))
    .andExpect(status().isOk())
    .andExpect(jsonPath("$", hasSize(1)))
    .andExpect(jsonPath("$[0].username", is(bjorn.getUsername())));