使用 JerseyInvocation 构建器测试格式错误 json

Test putting badly formed json using JerseyInvocation builder

我正在尝试编写集成测试以确保我的 dropwizard 应用程序返回适当的错误代码。其中一种情况包括确保如果被 PUT 的对象不可反序列化,我会得到一个合理的错误响应。

我找不到使用 JerseyInvocation.Builder 来 PUT 格式错误的 JSON 实体的方法。创建实体的唯一方法似乎是拥有正确类型的对象,这显然会反序列化。我希望能够创建一个实体,其序列化值是我提供的任意字符串。

我试过放置错误类型的对象,但这并没有测试我想测试的所有边缘情况。我还想避免创建很多与 API 期望的对象略有不同的类型。

任何人都可以建议一种实现我想要的方法吗?

更新:这是我目前使用的代码:

JerseyInvocation.Builder request; // initialised elsewhere and not interesting

is = new ClassPathResource(nameOfFileContainingWellFormedJson, MyEntityClsss.class).getInputStream(); entity = Entity.entity(is, MediaType.APPLICATION_JSON); request.put(entity); 此响应应返回 200 并返回 400。

is = new ClassPathResource(nameOfFileContainingBadlyFormedJson, MyEntityClsss.class).getInputStream(); entity = Entity.entity(is, MediaType.APPLICATION_JSON); request.put(entity); 此响应返回 400,但在上面返回 200 之前,它不是出于正确的原因这样做。

您可以使用 Jersey Entity class,用于任何 mime-type 的原始流。类似于:

ByteArrayInputStream bais = new ByteArrayInputStream("{\"malformattedJson".getBytes());
builder.post(Entity.entity(bais, "application/json"));

或者从测试中的 file/classpath 资源加载格式错误的 JSON 以放弃双引号转义