我有以下 REST 控制器
@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 的特定期望替换 model() 部分时,XML 和 JSON 字符串始终返回空。
我花了几天时间试图理解这一点,而且我对 Java 还是比较陌生,对 Spring 还是比较陌生。你能告诉我在哪里可以解决这个问题吗?
作为附加信息,我已将日志消息(使用 sfj4l)放在任何地方,但是当使用 Junit 运行时,DAO 中的日志消息有效,测试模块中的日志消息本身有效,但我的 REST 控制器内的日志消息没有出现.
就像 GET 函数被匹配了,但是函数的内容从不执行,并且得到空响应。尽管如此,我对 isOk() 的调用还是成功的。