gpt4 book ai didi

spring - 在 JUnit 测试中的 MockHttpServletRequest 中设置 @ModelAttribute

转载 作者:行者123 更新时间:2023-12-04 13:29:01 25 4
gpt4 key购买 nike

我正在尝试测试 spring mvc Controller 。其中一种方法将表单输入作为 POST 方法。
此方法通过 @ModelAttribute 获取表单的 commandObject注解。
如何使用 Spring 的 Junit 测试设置此测试用例?

Controller 的方法如下所示:

@RequestMapping(method = RequestMethod.POST)
public String formSubmitted(@ModelAttribute("vote") Vote vote, ModelMap model) { ... }
Vote对象在 .jsp 中定义:
 <form:form method="POST" commandName="vote" name="newvotingform">

现在我想在一个测试中测试这个表单 POST ,它的设置如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring/applicationContext.xml"})
@TestExecutionListeners({WebTestExecutionerListener.class, DependencyInjectionTestExecutionListener.class})
public class FlowTest { ... }

测试表单 POST 的实际方法:
@Test
public void testSingleSession() throws Exception {

req = new MockHttpServletRequest("GET", "/vote");
res = new MockHttpServletResponse();
handle = adapter.handle(req, res, vc);
model = handle.getModelMap();

assert ((Vote) model.get("vote")).getName() == null;
assert ((Vote) model.get("vote")).getState() == Vote.STATE.NEW;

req = new MockHttpServletRequest("POST", "/vote");
res = new MockHttpServletResponse();

Vote formInputVote = new Vote();
formInputVote.setName("Test");
formInputVote.setDuration(45);

// req.setAttribute("vote", formInputVote);
// req.setParameter("vote", formInputVote);
// req.getSession().setAttribute("vote", formInputVote);

handle = adapter.handle(req, res, vc) ;
model = handle.getModelMap();

assert "Test".equals(((Vote) model.get("vote")).getName());
assert ((Vote) model.get("vote")).getState() == Vote.STATE.RUNNING;
}

目前被注释掉的 3 行,是使这项工作的微弱尝试 - 然而它没有奏效。
任何人都可以提供一些提示吗?

我真的不想在我的测试中直接调用 Controller 方法,因为我觉得这不会真正在 Web 上下文中测试 Controller 。

最佳答案

你必须模拟你的 HTML 表单会做什么。它只会传递字符串请求参数。尝试:

req.setParameter("name","Test");
req.setParameter("duration","45");

关于spring - 在 JUnit 测试中的 MockHttpServletRequest 中设置 @ModelAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6339777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com