有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

为了测试连接到facebook graph 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();
    }

现在,虽然我可以用正确的错误响应对无效或丢失的访问令牌作出反应,但我还想测试我的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) 个答案

  1. # 1 楼答案

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

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

    此服务将生成您想要的任何响应。所以像http://mytest/test/errorTrap/111_2这样的任何不存在的页面都会被测试服务截取,并为您生成预期的响应