Java MockMvc。如何在junit测试中包含自定义对象
我需要JUnit测试来检查控制器。控制器的方法由提交表单调用。此方法接收填充的对象Java MockMvc。如何在junit测试中包含自定义对象,java,spring,spring-mvc,mocking,spring-test,Java,Spring,Spring Mvc,Mocking,Spring Test,我需要JUnit测试来检查控制器。控制器的方法由提交表单调用。此方法接收填充的对象EmailDispatchForm表单 这里是控制器的一个片段: @RequestMapping(value={"/sendEmail"}, method=POST) public String sendEmail(EmailDispatchForm form,Model model ){ String status = "OK"; try { workFlows.sendEmai
EmailDispatchForm表单
这里是控制器的一个片段:
@RequestMapping(value={"/sendEmail"}, method=POST)
public String sendEmail(EmailDispatchForm form,Model model ){
String status = "OK";
try {
workFlows.sendEmailAndRecordHistory(form);
} catch (Exception e) {
status = "ERROR";
model.addAttribute("errDescription", e.getCause().getMessage());
logger.error(e, e);
} finally {
model.addAttribute("sentEmailStatus", status);
}
return CommonConstants.VIEW_EMAIL_SENT;
}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = {WebConfig.class})
public class HomeControllerTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testShowEmailForm() throws Exception{
mockMvc.perform(get("/emailForm")).andExpect(view().name(CommonConstants.VIEW_EMAIL));
}
}
这是我的junit测试:
@RequestMapping(value={"/sendEmail"}, method=POST)
public String sendEmail(EmailDispatchForm form,Model model ){
String status = "OK";
try {
workFlows.sendEmailAndRecordHistory(form);
} catch (Exception e) {
status = "ERROR";
model.addAttribute("errDescription", e.getCause().getMessage());
logger.error(e, e);
} finally {
model.addAttribute("sentEmailStatus", status);
}
return CommonConstants.VIEW_EMAIL_SENT;
}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = {WebConfig.class})
public class HomeControllerTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testShowEmailForm() throws Exception{
mockMvc.perform(get("/emailForm")).andExpect(view().name(CommonConstants.VIEW_EMAIL));
}
}
您可以看到,在控制器中有一个方法sendmail()
,它有两个参数:EmailDispatchForm-form
,Model-Model
。我不知道如何在junit测试中包含这两个参数,以将其用作模拟对象
我非常感谢您的帮助,并想了解一些研究本期主题的资源(书籍)。第一个问题是您正在尝试使用GET和acces POST URL。 您的测试方法应如下所示:
@Test
public void testShowEmailForm() throws Exception{
mockMvc.perform(post("/sendEmail")).andExpect(view().name(CommonConstants.VIEW_EMAIL));
}
还可以在控制器方法中添加@RequestBody
public String sendEmail(@RequestBody EmailDispatchForm form,Model model )
要添加表格,只需添加到测试方法:
.contentType(MediaType.APPLICATION_JSON)
.content(json)
其中JSON是`EmailDispatchForm`对象的JSON形式
希望这能有所帮助。第一个问题是您试图使用GET和acces POST URL。 您的测试方法应如下所示:
@Test
public void testShowEmailForm() throws Exception{
mockMvc.perform(post("/sendEmail")).andExpect(view().name(CommonConstants.VIEW_EMAIL));
}
还可以在控制器方法中添加@RequestBody
public String sendEmail(@RequestBody EmailDispatchForm form,Model model )
要添加表格,只需添加到测试方法:
.contentType(MediaType.APPLICATION_JSON)
.content(json)
其中JSON是`EmailDispatchForm`对象的JSON形式
希望这有帮助。因此,我找到了另一种解决方案。看起来是这样的:
@Test
public void testShowEmailForm() throws Exception{
mockMvc.perform(post("/sendEmail")).andExpect(view().name(CommonConstants.VIEW_EMAIL));
}
@测试
public void loginUser()引发异常{
LoginForm LoginForm=新的LoginForm();
loginForm.setPassword(“admin”);
loginForm.setUserId(“管理员”);
RequestBuilder request=post(“/authentication”)
.flashAttr(“loginForm”,loginForm);
模拟MVC
.执行(请求)
.andDo(MockMvcResultHandlers.print())
.andExpect(重定向电子邮件表单);
}因此,我找到了另一种解决方案。看起来是这样的:
@Test
public void testShowEmailForm() throws Exception{
mockMvc.perform(post("/sendEmail")).andExpect(view().name(CommonConstants.VIEW_EMAIL));
}
@测试
public void loginUser()引发异常{
LoginForm LoginForm=新的LoginForm();
loginForm.setPassword(“admin”);
loginForm.setUserId(“管理员”);
RequestBuilder request=post(“/authentication”)
.flashAttr(“loginForm”,loginForm);
模拟MVC
.执行(请求)
.andDo(MockMvcResultHandlers.print())
.andExpect(重定向电子邮件表单);
}