java - Spring MockMvc - 请求参数列表

标签 java spring spring-mvc

我正在尝试使用 MockMvc 测试几个 Controller 端点,但遇到了一些麻烦(请客气点,我是新手......)。使用字符串作为参数的简单端点工作正常,但使用字符串列表的稍微复杂一点的端点不满意并抛出异常;有人能指出我做错了什么吗?

@RestController
@RequestMapping("/bleh")
public class Controller
{
    @Autowired
    private DataService dataService

    @RequestMapping(value = "/simple", method = RequestMethod.GET)
    public String simple(String name) 
    { 
        return dataService.getSomeData(name) 
    }

    @RequestMapping(value = "/complicated", method = RequestMethod.GET)
    public String complex(List<String> names)
    { 
        return dataService.getSomeOtherData(names) 
    }
}

——
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class HealthControllerTests extends Specification
{
    def dataServiceMock;
    def testController;
    def mockMvc;


    def setup(){
        dataServiceMock = Mock(DataService)
        dataServiceMock.getSomeData >> "blaah"
        testController = new Controller(dataService: dataServiceMock)
        mockMvc = MockMvcBuilders.standaloneSetup(testController).build();
    }

    def "working test"
        when:
        def response = MockMvc.perform(get("/simple").param("name", "tim"))
                .andReturn()
                .getResponse();

        then:
        response.status == OK.value();
        response.contentAsString == "blaah"

    def "unhappy test"
        when:
        def response = MockMvc.perform(get("/complicated").param("names", new ArrayList<>()))
            .andReturn()
            .getResponse();

        then:
        response.status == OK.value()


}

抛出这个:
No signature of method: org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder.param() is applicable for argument types: (java.lang.String, java.util.ArrayList) values: [names, []]. Possible solutions: param(java.lang.String, [Ljava.lang.String;), params(org.springframework.util.MultiValueMap), wait(), grep(), any(), putAt(java.lang.String, java.lang.Object)])

最佳答案

不支持 ArrayList 但您可以执行以下操作

def "complicated test"
    when:
    def response = MockMvc.perform(get("/complicated").param("names", "bob", "margret"))
        .andReturn()
        .getResponse();

    then:
    response.status == OK.value()

def "another complicated test"
        when:
        def response = MockMvc.perform(get("/complicated").param("names", new String[]{"bob", "margret"}))
            .andReturn()
            .getResponse();

        then:
        response.status == OK.value()

关于java - Spring MockMvc - 请求参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45044021/

相关文章:

java - 我怎样才能将这个使用 SpringJUnit4ClassRunner 的面向 'spring 3.1' 的 junit4 测试转换为基于 spring 的基于 junit3.8 的测试?

hibernate - 如何避免在实体的 hibernate 条件中初始化 Eager 列

java - Spring SimpleThreadScope 未在@Components 上正确 Autowiring

java - 用户帐户被禁用 - Spring Security

java - shell命令未执行

java - 我应该使用 new BASE64Encoder() 还是 Base64.getEncoder() 在 java 中对图像进行编码?

java - Spring MVC 与 Hibernate 数据保存错误

java - Spring MVC 复选框

java - 使用 Selenium 迭代网站的所有链接

java - 因为我只能通过 multicasocket 中的以太网接口(interface)发送信息