1. 程式人生 > >Spring MVC 測試 | 模擬提交表單

Spring MVC 測試 | 模擬提交表單

Spring 4 MVC 單元測試例子 一文中利用Spring test 框架進行了簡單的測試,程式碼mockMvc.perform(get("/SayHello/getAnswer"))使用get()方法傳送了一個GET請求。

現在需求變了,需要提交一個表單,該如何實現?

首先,要測試下面這樣一個方法:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping(method = RequestMethod.POST)
    @ResponseStatus( HttpStatus.CREATED )
    public
void addUser(@Validated User user, BindingResult result, HttpServletResponse response) throws BindException{ //省去程式碼 } }

注意它要接收一個User類物件作為引數,User類如下:

@Component
public class User {
   private long id;
   private String name;

   //省去getter和setter
}

模擬請求中要如何攜帶這樣的引數呢?是建立一個User物件,新增到請求中嗎?實際,測試類應該這樣編寫:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations={"classpath:spring-servlet.xml","classpath:applicationContext.xml"})
public class UserControllerTest {

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public
void Setup(){ this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); } @Test public void testAddUser() throws Exception { mockMvc.perform(post("/user").param("id", "1")) //注意這行 .andDo(print()) .andExpect(status().is(201)) .andExpect(redirectedUrl("/user/1")); } }

從上面的程式碼中可以看出,post()方法可以像post("/user").param("id", "1")這樣加入表單引數,要加多個引數,post()方法後面就可以加多個param()方法。只要param()方法新增的引數的名字和User類的屬性名字相同即可。