Jersey测试框架 - 为灰熊中的所有未知路径定义默认错误响应

时间:2012-04-13 08:01:31

标签: java testing facebook-graph-api jersey grizzly

要测试连接到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);
    }

或者也许我可以设置灰熊以表现出所希望的行为..?!

谢谢!

1 个答案:

答案 0 :(得分:2)

显然,facebook有自己的服务来拦截错误。同样的事情应该在你的代码中完成。只需公开您自己的测试服务即可拦截所有请求

@Path("/test/errorTrap")
public class ErrorTrapService{
 ....
}

此服务将产生您想要的任何响应。因此,任何不存在的页面(如http://mytest/test/errorTrap/111_2)都会被测试服务拦截并为您生成预期的响应