2012-04-13 65 views
1

爲了測試我們的API連接到我們使用基於新澤西測試框架一個模擬服務器設置和灰熊Facebook的圖形API的所有未知的路徑默認錯誤響應:新澤西測試框架 - 定義在灰熊

@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,我也想測試,試圖在Facebook的訪問的未知的資源,即一個未知的路徑時,我的API正確反應。

現在我從灰熊得到了404很顯然,如果我嘗試訪問說「/ 111_2」,但Facebook似乎趕上這個錯誤,敷一JSON響應內,包含字符串「假」狀態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); 
    } 

或者,也許我可以設置灰熊表現爲期望..?!

謝謝!

回答

2

顯然Facebook有它自己的服務攔截錯誤。你的代碼應該完成同樣的事情。只是暴露你自己測試服務,攔截所有請求

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

這項服務將產生你想要的任何迴應。因此,任何未存在的頁面,如http://mytest/test/errorTrap/111_2將通過測試服務截獲併產生預期的響應您

+0

所以您的解決方案表明,我只是創造將產生在我的測試中一個所需的響應和訪問其他資源?這意味着什麼,創建一個已知資源並將其稱爲未知?這就是我計劃在第一時間做的。 但是你對曝光的想法給了我一個想法。我可能會嘗試攔截灰熊過濾器鏈,檢查是否可以將調用禁用到現有資源,並且如果不將它轉發到默認位置,然後將產生期望的錯誤... 我會更新這個帖子的最後結果給任何感興趣的人 謝謝你! – Pete 2012-04-23 06:14:09

+0

@Pete「會產生所需的響應,並在我的一個測試中訪問它?」 - 是的,你明白了!不用謝。 – Dewfy 2012-04-23 07:37:13