Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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/2/spring/13.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 MockMvc。如何在junit测试中包含自定义对象_Java_Spring_Spring Mvc_Mocking_Spring Test - Fatal编程技术网

Java MockMvc。如何在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

我需要JUnit测试来检查控制器。控制器的方法由提交表单调用。此方法接收填充的对象
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(重定向电子邮件表单);
}