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

内容中包含对象的java Spring Boot测试POST REST

穆文斌
2023-03-14

我正在尝试对一个post rest服务进行单元测试,这个服务以一个对象(而不是一个json)作为内容。结果是我无法测试它,MockMvc对象需要一些json内容。

控制器的一部分,其中Dsd是应用程序的内部类:

@PostMapping(path="dsd")
@ApiOperation(value = "Sends Dsd  data",response = Dsd.class)
public Dsd requestPostDsd (
        @ApiParam("DSD data")
        @Valid @RequestBody Dsd dsd,
        HttpServletResponse response
) throws IOException, ParseException {
    if (dsd.getId() != null) {
        // do something
    } else {
        response.sendError(HttpStatus.BAD_REQUEST.value(), "the id doesn't exist");
    }
    return dsd;
}

在单元测试代码中,我创建了一个MockMvc对象,但是perform().content方法需要一个字符串json内容,所以我不能传递我的Dsd对象。

如何测试这个POST api?

 @Test
public void postDsdTest() throws Exception {

    Dsd dsd = new Dsd();

    this.mvc.perform(post("/services/latest/validation/dsd")
            .header("Origin", HTTP_HEADER_ORIGIN)
            .header("Accept", "application/json")
            .content(dsd)
            .contentType(MediaType.APPLICATION_JSON))
            .andExpect(header().string("Access-Control-Allow-Origin", HTTP_HEADER_ORIGIN))
            .andExpect(status().isOk())
            .andDo(MockMvcResultHandlers.print());

}

共有1个答案

章晗日
2023-03-14

您可以尝试编写一个将对象序列化为JSON字符串的TestUtil类:https://www.petrikainulainen.net/programming/spring-framework/unit-test-of-spring-mvc-controllers-rest-api/

使用Jackson,您可以将对象序列化到JSON:

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return mapper.writeValueAsBytes(object);
 类似资料:
  • 我对JUnit测试非常陌生,我试图理解如何测试类的实例化。 假设我有以下类,它需要一个来实例化。当然,这个玩具列表是在程序的另一部分上创建的,但是我不太清楚应该在哪里创建它,以便对进行单元测试。 应该是这样吗? 基本上,我的问题是应该在哪里以及如何创建测试依赖于创建的列表的类所需的arraylist对象。

  • 我正在为授权服务器编写一个测试,测试oauth响应的内容类型是JSON。授权服务器使用的是< code > spring-security-oauth 2 2 . 0 . 1 . 4 . release ,我的JUnit测试使用的是< code >放心2.9.0。 当我运行这个测试时,我遇到了这个失败。 因此,<code>org.apache.http.entity的值。ContentType</

  • Django提供了一组小工具,在写测试时派上用场。 测试客户端 测试客户端是一个Python类,作为一个虚拟的Web浏览器,允许您测试您的视图,并与您的Django供电的应用程序以编程方式交互。 你可以用测试客户端做的一些事情是: 模拟对URL的GET和POST请求,并观察响应 - 从低级HTTP(结果头和状态代码)到页面内容的一切。 查看重定向链(如果有),并在每个步骤中检查网址和状态代码。 测

  • 我从accuweather获得了以下带有json的代码 我尝试通过Jackson将此对象解析为POJO 我有json中指定的所有模型,如、数组、,由组成(在json中命名为最小值和最大值)等,它们都有私有字段和公共构造函数、getter和setter。但是我没有一些字段,因为我想省略它们(Day、night、EpochDate、Source)。 当我运行程序时,我得到了错误 com.fasterx

  • 我用的是Gson。toJSON方法。我的pojo包含一个属性作为URL字符串。奇怪的是Gson转换器改变了URL字符 输出为:/myApp/myAction。html?方法\U003Drooter\u0026cmd\u003d1 预期输出为:/myApp/myAction。html?方法=路由器

  • 此功能与之相反.only()。通过附加.skip(),您可以告诉Mocha简单地忽略这些套件和测试用例。跳过的任何内容都将被标记为待处理,并按此报告。这是跳过整个套件的示例: describe('Array', function() { describe.skip('#indexOf()', function() { // ... }); }); 或者特定的测试用例: describe('A