Java 由于未找到模型属性,Spring MVC控制器测试通过
我已经在下面创建了主控制器。此控制器通过PostService类获取我在PostRepository类中创建的5个虚拟帖子Java 由于未找到模型属性,Spring MVC控制器测试通过,java,spring,spring-mvc,spring-test,Java,Spring,Spring Mvc,Spring Test,我已经在下面创建了主控制器。此控制器通过PostService类获取我在PostRepository类中创建的5个虚拟帖子 @Controller public class HomeController { @Autowired PostService postService; @RequestMapping("/") public String getHome(Model model){ model.addAttribute("Post",
@Controller
public class HomeController {
@Autowired
PostService postService;
@RequestMapping("/")
public String getHome(Model model){
model.addAttribute("Post", postService);
return "home";
}
}
我已经实现了以下测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {WebConfig.class})
@WebAppConfiguration
public class ControllerTest {
@Test //Test the Home Controller
public void TestHomePage() throws Exception{
HomeController homeController = new HomeController();
MockMvc mockMvc = standaloneSetup(homeController).build();
mockMvc.perform(get("/"))
.andExpect(view().name("home"))
.andExpect(model().attributeDoesNotExist("Post"));
}
}
测试已成功通过。但是属性应该存在。如果这是完整的代码,那么您就丢失了
@RunWithSpringJUnit4ClassRunner.class您混合了Spring测试支持的两个不兼容功能 如果在测试中实例化控制器,则需要使用MockMvcBuilders.standaloneSetup 如果您使用的是Spring TestContext框架,即@ContextConfiguration等,那么您需要使用MockMvcBuilders.webAppContextSetup 因此,以下是测试的适当配置
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebConfig.class)
@WebAppConfiguration
public class ControllerTest {
@Autowired
WebApplicationContext wac;
@Autowired
PostService postService;
@Test
public void TestHomePage2() throws Exception {
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
mockMvc.perform(get("/"))
.andExpect(view().name("home"))
.andExpect(model().attribute("Post",postService));
}
}
问候,
Sam是Spring TestContext Framework的作者您至少应该在完整的HomeController中输入更完整的代码,完整的错误消息以查看哪一行出错,…@RemyG,谢谢!我已经用你的建议更新了帖子。这并不能解决问题,仍然会收到相同的错误消息。我已经更新了我的问题,纳入了你的建议。谢谢@Irwan HendraThanks@Sam Brannen,这很有道理!我混合了两种推荐的方法。加载我的springmvc配置&创建一个不加载Spring配置的控制器实例。我已经编辑了我的代码并删除了standaloneSetup,因为这不适用。