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

时间:2017-02-07 18:27:35

标签: java json rest jersey dropwizard

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

我找不到使用JerseyInvocation.Builder来推送一个形式错误的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,它才会出于正确的原因这样做。

1 个答案:

答案 0 :(得分:2)

您可以使用Jersey Entity类,用于任何mime类型的原始流。类似的东西:

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

或者从测试中的文件/类路径资源加载格式错误的JSON,以避免双引号转义