1

为了测试我们连接到 facebook 图形 API 的 API,我们使用基于 Jersey 测试框架和 grizzly 的模拟服务器设置:

@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 上的未知资源(即未知路径)时是否正确反应。

现在,如果我尝试访问说“/111_2”,我显然会从我的灰熊那里得到一个 404,但 facebook 似乎捕获了该错误并将其包装在Json 响应中,其中包含状态为 200的字符串“false”

所以...我如何设置测试框架以返回

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);
    }

或者,也许我可以设置 grizzly 以按需要行事..?!

谢谢!

4

1 回答 1

2

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

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

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

于 2012-04-22T19:54:00.577 回答