2013-03-25 125 views
1

我有以下的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()的呼叫是成功的。

回答

0

「找不到ModelAndView」是正確的。使用@ResponseBody將返回的值直接寫入響應的主體。沒有模型,沒有視圖分辨率等。

更一般地說,理想情況下,集中於從客戶端角度測試請求的結果。這包括響應標頭,正文和響應狀態。測試客戶通常不可見的其他結果,如模型屬性更加謹慎。

+0

如果ModelAndView是空的,我明白它。但是,不應該返回正文中的XML或JSON內容嗎?我這樣說是因爲當_andpath(_)使用_xpath_或_json_函數時,結果也是空的。我收到XML格式的「格式錯誤的xml,第1行第1列」或JSON格式的「沒有json數據」。另外,當使用_andDo(print())時,當我檢查控制檯輸出時,主體也會返回空。 – devnull 2013-03-28 14:26:56

+0

另外,我應該補充說,只使用_andExpect(content()。string(_ ...這也會返回空結果,不是ModelAndView的問題。 – devnull 2013-04-02 21:35:32

+0

@devnull,同樣的問題在這裏。你有沒有想過? – Nikita 2013-09-04 15:42:33

0

我和你的問題幾乎完全相同,並且似乎找到了導致問題的原因。

我已經在下面的評論之一中解釋了我的情況,但這應該更完整。

我使用Spring Roo 1.2.4,Spring 3.2.3。當我運行我的應用程序時,我可以捲曲所有控制器,並且所有控制器都可以正常工作。但是,我的一個控制器在mockmvc測試中返回空的json,沒有引發錯誤。

我發現在袋鼠試捕的問題問題產生的AspectJ控制器代碼(那些說你不應該編輯文件),並發現了序列化代碼(.toJsonArray)失敗,

org.hibernate.LazyInitializationException: failed to lazily initialize a collection...

這是默默的忽略,沒有堆棧跟蹤自動噴出。