当前位置: 首页 > 知识库问答 >
问题:

单元测试中模拟Spring控制器方法模型绑定

锺离德运
2023-03-14

在Spring Boot(Spring MVC)中,我试图根据本问题中的#4测试表单到控制器的绑定。我在复制魔法帖请求时遇到问题-

WebRequest postRequest = new ServletWebRequest(new MockHttpServletRequest());
postRequest.setAttribute("itemModel.id", "23", RequestAttributes.SCOPE_REQUEST);
ItemModel itemModel = new ItemModel();
WebRequestDataBinder dataBinder = new WebRequestDataBinder(itemModel);
dataBinder.bind(postRequest);
assertThat(itemModel.getId(), equalTo(new Long(23)));

然而,我的断言失败了,itemModel。getId()返回null。当spring调用@Controller类上的方法时,我如何像spring那样初始化模型?

更新

我已经更新了以下内容,但它仍然不起作用:

MockHttpServletRequest postRequest = new MockHttpServletRequest();
postRequest.addParameter("itemModel.id", "23");
WebRequest webPostRequest = new ServletWebRequest(postRequest);
ItemModel itemModel = new ItemModel();
WebRequestDataBinder dataBinder = new WebRequestDataBinder(itemModel);
dataBinder.bind(webPostRequest);
assertThat(itemModel.getId(), equalTo(new Long(23)));

共有2个答案

章建木
2023-03-14

使用HttpClient?进行集成测试怎么样?。如果对您有用,请看以下示例:

      @Test
     public void test() {
             HttpClient loggedClient = new HttpClient();
             PostMethod loginPostMethod = new PostMethod(loginURL);
             loginPostMethod.addParameter("j_username", login);
             loginPostMethod.addParameter("j_password", password);
             loginPostMethod.addParameter("remember", "1");
             loginPostMethod.addParameter("clientType", clientType);
             loginPostMethod.addParameter("clientVersion", clientVersion);
              httpClient.executeMethod(postMethod);


             String USERS_URL = HTTP_SERVER_DOMAIN + "/service";
             PutMethod put = new PutMethod(USERS_URL);
             put.addRequestHeader("Content-Type", "application/json");
             put.setRequestBody("your_body");

             try {
                 loggedClient.executeMethod(put);
             } catch (HttpException e) {
                 e.printStackTrace();
             } catch (IOException e) {
                 e.printStackTrace();
             }

             assertEquals(HttpStatus.SC_OK, put.getStatusCode());

}

白才艺
2023-03-14

我认为应该是“id”,而不是“itemModel.id”

 类似资料:
  • 问题内容: 我有以下情况: controller.js controllerSpec.js 错误: 我也尝试过类似的方法,但没有成功: 我该如何解决?有什么建议? 问题答案: 有两种方法(或肯定有更多方法)。 想象一下这种服务(无论它是工厂都没关系): 使用此控制器: 一种方法是使用要使用的方法创建对象并对其进行监视: 然后,将其作为dep传递给控制器​​。无需注入服务。那可行。 另一种方法是模拟

  • 我有一个Spring 3.2 MVC应用程序,正在使用Spring MVC测试框架测试控制器动作的GET和POST请求。我使用Mockito来模拟服务,但我发现模拟被忽略了,我的实际服务层被使用了(因此,数据库被击中)。 控制器测试中的代码: 你会注意到我有两个上下文配置文件;这是一种黑客行为,因为如果我无法阻止控制器测试命中实际的服务层,那么该服务层的存储库也可能指向测试数据库。我再也不能忍受这

  • 问题内容: 我有一个ParseService,我想对其进行模拟以测试使用它的所有控制器,我一直在阅读有关茉莉花间谍的信息,但对我来说仍然不清楚。谁能给我一个关于如何模拟定制服务并在Controller测试中使用它的示例吗? 现在,我有一个使用服务插入书的控制器: 服务是这样的: 到目前为止,我的测试如下所示: 现在测试失败: 我做错了什么? 问题答案: 我做错的是没有在beforeEach中将模拟

  • A.我们正在使用spring boot Rest Api进行服务调用。我想我们可以将Junit用于单元测试用例。但需要了解JUnit以外的其他合适的工具或框架来模拟spring boot Rest Api()的单元测试。

  • 我正在尝试使用MockMvc和mockito为应用程序中的rest控制器类编写单元测试。我有一个实体类的DTO类,我给出它作为controller方法的输入。controller方法将此DTO对象映射到entity类中,并使用my service类持久化它。持久化之后,通过映射service类的方法返回的对象来创建一个新的DTO类,并在ResponseEntity对象中返回这个DTO。在我的单元测

  • 我在尝试包装我的代码以用于单元测试时遇到了一些问题。问题是。我有接口IHttpHandler: 现在很明显,我将在Connection类中有一些方法,这些方法将从my后端检索数据(JSON)。但是,我想为这个类编写单元测试,显然我不想编写针对真实后端的测试,而是一个被嘲弄的测试。我曾尝试谷歌一个很好的答案,但没有很大的成功。我以前可以并且曾经使用过Moq来模拟,但是从来没有在像HttpClient