要测试连接到facebook图谱API的API,我们使用基于Jersey Test Framework和灰熊的模拟服务器设置:
@Path("/" + PostRest.RESOURCE)
@Produces("application/json")
public class PostRest {
public static final String RESOURCE = "111_222";
@GET
public Response getPost(@QueryParam("access_token") String access_token) {
if (access_token != VALID_TOKEN) {
return Response.status(400).entity(createErrorJson()).build();
}
return Response.status(200).entity(createSomeJsonString()).build();
}
现在虽然我可以使用正确的错误响应对无效或缺少的access_token作出反应,但我还想测试我的API在尝试访问Facebook 未知资源时的反应是正确的,即未知路径。
现在我显然从我的灰熊手中得到了404,如果我尝试访问说“/ 111_2”,但facebook似乎抓住了这个错误并将其包含在 Json响应中,包含字符串“false” 状态200 。
那么......如何设置测试框架以返回
Response.status(200).entity("false").build();
每次调用已知路径?
基本示例:
@ContextConfiguration({ "classpath:context-test.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeTest extends JerseyTest {
@Inject
private SomeConnection connection;
private String unkownId = "something";
public SomeTest() throws Exception {
super("jsonp", "", "com.packagename.something");
}
@Test(expected = NotFoundException.class)
public void testUnkownObjectResponse() throws NotFoundException {
// here it should NOT result in a 404 but a JSON wrapped error response
// which will be handled by the Connection class and
// result in a custom exception
connection.getObject(unkownId);
}
或者也许我可以设置灰熊以表现出所希望的行为..?!
谢谢!
答案 0 :(得分:2)
显然,facebook有自己的服务来拦截错误。同样的事情应该在你的代码中完成。只需公开您自己的测试服务即可拦截所有请求
@Path("/test/errorTrap")
public class ErrorTrapService{
....
}
此服务将产生您想要的任何响应。因此,任何不存在的页面(如http://mytest/test/errorTrap/111_2)都会被测试服务拦截并为您生成预期的响应