2014-06-27 71 views
0

因此,我不認爲有很多從春天進行測試控制器用SpringMVC在這裏Mockmvc的問題,但我通過彈簧教程閱讀 https://spring.io/guides/tutorials/rest/2/ 那裏有很多有,但我只是試圖用一個id參數在web服務上做一個簡單的GET。控制器是這樣的:爲Spring RESTful Web服務建立MockMVC

@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()); 
    } 

} 

我一些其他的事情,我打中立柱之前我會提到。所以看看這個教程中的例子,我試圖挑選那些我只會用到的東西,所以它不是一個確切的副本。我必須做的一個很大的區別,我懷疑這與測試插件的配置有什麼關係,我不得不實例化控制器,其中示例足夠聰明以知道創建實例。此外,該示例依靠Gradle進行項目設置,並且我只有這個項目的一個pom文件。不知道這是否有所作爲。看起來像這是新東西,但這是一個非常簡單的例子。預先感謝您的幫助。

回答

0

你應該修正你

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

RequestMapping到

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

{$id}應該只是{ID}和headers有一個錯字和語法不正確。也許你應該考慮使用producesconsumes而不是headers param。

這應該修復404狀態。