我有以下的REST控制器春3.2.2:MockMVC,返回空結果
@Controller
@RequestMapping("/rest/transceptors")
public class TransceptorRestController
{
@Autowired
private TransceptorDao transceptorDao;
@RequestMapping(value="/get/{idTransceptor}", method=RequestMethod.GET)
public @ResponseBody Transceptor getOne(@PathVariable("idTransceptor") Long idTransceptor)
{
return transceptorDao.searchByIdTransceptor(idTransceptor);
}
}
在JBoss中運行時,其結果是如預期該控制器正常工作。我使用Postman(Google Chrome的REST測試擴展),我可以在XML和JSON中獲得正確的結果。
但是,我使用MockMVC進行測試時遇到了問題。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
locations={
"classpath:test-servlet-context.xml"
})
@WebAppConfiguration
public class TransceptorRestControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup()
{
mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void testRoot() throws Exception
{
mockMvc.perform(get("/")).
andExpect(status().isOk());
}
@Test
public void testGet() throws Exception
{
mockMvc.perform(get("/rest/transceptors/get/1"))
.andExpect(status().isOk())
.andDo(print())
.andExpect(model().attribute("name", equals("Test_Name_1")));
}
TestRoot測試工作正常。但是,當我嘗試使用andExpect(model()...我收到消息「No ModelAndView Found」時,XML和JSON字符串始終返回空。
我花了幾天試圖理解這一點,我是相當新的Java和更多的新春。你能告訴我我在哪裏可以尋找到解決這個問題?
由於adittional信息,我已經將日誌消息(包含sfj4l)放到了每個地方,但是在使用Junit運行時,DAO中的日誌消息起作用,Test模塊中的日誌消息本身可以正常工作,但是REST控制器中的日誌消息不會顯示。
就像GET函數匹配,但函數的內容永遠不會執行,並獲得空的響應。儘管如此,我對isOk()的呼叫是成功的。
如果ModelAndView是空的,我明白它。但是,不應該返回正文中的XML或JSON內容嗎?我這樣說是因爲當_andpath(_)使用_xpath_或_json_函數時,結果也是空的。我收到XML格式的「格式錯誤的xml,第1行第1列」或JSON格式的「沒有json數據」。另外,當使用_andDo(print())時,當我檢查控制檯輸出時,主體也會返回空。 – devnull 2013-03-28 14:26:56
另外,我應該補充說,只使用_andExpect(content()。string(_ ...這也會返回空結果,不是ModelAndView的問題。 – devnull 2013-04-02 21:35:32
@devnull,同樣的問題在這裏。你有沒有想過? – Nikita 2013-09-04 15:42:33