Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于未找到模型属性,Spring MVC控制器测试通过_Java_Spring_Spring Mvc_Spring Test - Fatal编程技术网

Java 由于未找到模型属性,Spring MVC控制器测试通过

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",

我已经在下面创建了主控制器。此控制器通过PostService类获取我在PostRepository类中创建的5个虚拟帖子

@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,因为这不适用。