Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
Spring 如何模拟POST参数和模型属性?_Spring_Testing_Model View Controller_Junit - Fatal编程技术网

Spring 如何模拟POST参数和模型属性?

Spring 如何模拟POST参数和模型属性?,spring,testing,model-view-controller,junit,Spring,Testing,Model View Controller,Junit,我正在使用SpringMVC框架,我想用JUnit测试我的控制器。我应该如何模拟发布或获取控制器的参数,以及如何访问模型的属性以检查其内容?我的控制器的签名如下: @RequestMapping(value="/findings", method=RequestMethod.POST) public String findUsers(@RequestParam("userInput") String userInput, Model m) 您可以使用spring-test和mockito以及j

我正在使用SpringMVC框架,我想用JUnit测试我的控制器。我应该如何模拟发布或获取控制器的参数,以及如何访问模型的属性以检查其内容?我的控制器的签名如下:

@RequestMapping(value="/findings", method=RequestMethod.POST)
public String findUsers(@RequestParam("userInput") String userInput, Model m)

您可以使用
spring-test
mockito
以及
junit
来完成任务

spring测试
使您能够在spring中测试控制器和一系列其他东西

mockito
是创建模拟类的一个很好的库

这是对控制器单元测试的高度概括。这可能不适合你的情况,但应该给你一个起点

public class SomeControllerTest {
    private SomeController controller;

    @Mock
    private View view;

    private MockMvc mockMvc;

    @Before
    public void setup(){
        MockitoAnnotations.initMocks(this);

        mockMvc = MockMvcBuilders
                .standaloneSetup(controller)
                .setSingleView(view)
                .build();
    }

    @Test
    public void test() throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        Model m = new Model();

        MvcResult mvcResult = mockMvc.perform(post("/findings")
                .contentType(MediaType.APPLICATION_JSON)
                .content(objectMapper.writeValueAsString(m)))
        .andExpect(status().isOK())
        .andReturn();
    }
}

为了做到这一点,我建议您进行一个简单的测试,在该测试中实例化控制器(您可以模拟所有依赖项),然后调用方法pasing Model

public class MyController (){
  MyDependencyOne one;

  MyDependencyTwo two ;

  @Autowired
  public MyController (MyDependencyOne one, MyDependencyTwo two){
    this.one = one;
    this.two = two;
  }
  public String findUsers(@RequestParam("userInput") String userInput, Model 
  m){
      // do whatever
  }
}

public class MyControllerTest (){

  @Test
  public void myTest(){
      //MOCK your dependencies
      MyController controller = new MyController(one, two);
      Model model = new  ExtendedModelMap()
      controller.filter(model);
      assertEquals("yourAtribute", model.asMap().get("yourAtribute");
  }

}

您是否正在使用
spring test
?我将如何访问模型的属性以检查其内容是否符合预期?您的意思是如何检查控制器的响应?我想查看模型属性的值是否正确。这个值将显示在一个.jsp页面上,所以我想测试它是否工作正常如果我查看传入模型的方法,会有什么改变这个值?控制器的结果是一个字符串,通常您会检查字符串的值是否与给定特定模型的预期值匹配