1

我有一个控制器:

@Controller
@RequestMapping(value = "/bookForm")
public class BookFormController {

    @Autowired
    private BookHttpRequestParser parser;

    @Autowired
    private BooksService booksService;

    @RequestMapping(params = "add", method = RequestMethod.POST)
    public String addBook(HttpServletRequest request) {
        try {
            Book newBook = parser.createBookFromRequest(request);
            booksService.addBook(newBook);
        } catch (InvalidTypedParametersException e) {

        }
        return "redirect:index.html";
    }

这个控制器有一个将书添加到数据库的方法。方法具有 @RequestMapping 注释和params = "add"值。

我试图将此参数标准设置为控制器单元测试方法:

@Test
public void addBook() throws Exception{
    HttpServletRequest request = mock(HttpServletRequest.class);
    Book book = new Book();
    when(parser.createBookFromRequest(request)).thenReturn(book);

    mockMvc.perform(post("/bookForm", "add"))
    .andExpect(status().isOk())
    .andExpect(view().name("redirect:index.html"));
}

在哪里指定这个@ResuetsMapping 参数值?

这个:

mockMvc.perform(post("/bookForm", "add" ))

根本不起作用。

4

2 回答 2

0

以下应该工作。

mockMvc.perform(post("/bookForm?add="))

于 2017-01-19T11:28:39.133 回答
0

利用RequestBuilder requestBuilders;

反对建立您的请求

requestBuilders = MockMvcRequestBuilders.get("URL/{Pathvariable}","PathvariableValue")
                    .contentType(MediaType.APPLICATION_JSON)
                    .header("HeaderName", HeaderValue)
                    .param("ParameterName", "Value")
                    .param("ParameterName", "Value")
                    .accept(MediaType.APPLICATION_JSON);

和表演者

mockMvc.perform(requestBuilders)
                    .andDo(print())
                    .andExpect(status().isOk())
                    .andReturn();
于 2020-07-02T08:53:50.530 回答