为Spring Restful Web Service设置MockMVC

问题描述 投票:0回答:1

因此,我认为从春季开始,在Mockmvc上没有很多关于测试springmvc控制器的问题,但是我通读了Spring教程https://spring.io/guides/tutorials/rest/2/ ,那里有很多在那里,但我只是尝试使用单个id参数在Web服务上执行简单的GET。 控制器如下所示:

@RestController
@RequestMapping("/demandrest")
public class DemandServicesController {

    @Autowired
    DemandService demandService;


    @RequestMapping(value = "/demand/{$id}", method = RequestMethod.GET, headers= "Accept-application/jsson")
    public Demand readDemand(@RequestParam(value="id", required=true) String id){
        return demandService.readDemand(new Long(id));
    }

我编写了一个使用org.springframework.test.web.servlet.MockMvc的单元测试,我尝试模拟(真正存根)服务调用,并对状态码进行断言,并获取状态码404。我的测试看起来像这样

import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.test.web.servlet.MockMvc;

public class DemandServicesControllerTest {

    MockMvc mockMvc;

    @InjectMocks
    DemandServicesController demandServicesController = new DemandServicesController();

    @Mock
    DemandService demandService;

    @Before
    public void setUpUnitTest() throws Exception {
        MockitoAnnotations.initMocks(this);
        this.mockMvc = standaloneSetup(demandServicesController).
                setMessageConverters(new MappingJackson2HttpMessageConverter()).build();
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void testReadDemandState() throws Exception {
        Long id = new Long(99);
    Demand demand = new Demand();
        demand.setDescription("description");
        when(demandService.readDemand(id)).thenReturn(demand );
        this.mockMvc.perform(get("/demandrest/demand/{id}",id.toString()).
                accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
    }

}

在发布之前,我还会提及其他一些事情。 因此,从教程中的示例来看,我试图仅选择我只会使用的内容,因此它不是精确的副本。 我必须做的一个很大的不同,我怀疑这与在pom中配置测试插件的方式有关,我必须实例化实例足以知道创建实例的实例的控制器。 另外,该示例依赖于Gradle进行项目设置,而我与此项目只有一个pom文件。 不知道这是否有所作为。 似乎这是新事物,但这是一个非常简单的示例。 在此先感谢您的帮助。

spring rest mockito mockmvc
1个回答
0
投票

您应该从以下位置修复RequestMapping

@RequestMapping(value = "/demand/{$id}", method = RequestMethod.GET, headers= "Accept-application/jsson")

@RequestMapping(value = "/demand/{id}", method = RequestMethod.GET, headers= "Accept=application/json")

{$id}应该只是{id},并且headers具有拼写错误和不正确的语法。 也许您应该考虑使用producesconsumes而不是headers参数。

这应该可以修复404状态。

© www.soinside.com 2019 - 2024. All rights reserved.