我正在尝试编写集成测试,以确保我的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,它才会出于正确的原因这样做。
答案 0 :(得分:2)
您可以使用Jersey Entity
类,用于任何mime类型的原始流。类似的东西:
ByteArrayInputStream bais = new ByteArrayInputStream("{\"malformattedJson".getBytes());
builder.post(Entity.entity(bais, "application/json"));
或者从测试中的文件/类路径资源加载格式错误的JSON,以避免双引号转义