2013-04-05 37 views
0

我有一個方法,用來通過彈簧安全限制訪問。以下是方法:反思testNG

@PreAuthorize("isAuthenticated() and hasPermission(#request, 'CREATE_REQUISITION')") 
    @RequestMapping(method = RequestMethod.POST, value = "/trade/createrequisition") 
    public @ResponseBody 
    void createRequisition(@RequestBody CreateRequisitionRO[] request, 
      @RequestHeader("validateOnly") boolean validateOnly) { 
     logger.debug("Starting createRequisition()..."); 
     for (int i = 0; i < request.length; i++) { 
      CreateRequisitionRO requisitionRequest = request[i]; 

      // FIXME this has to be removed/moved 
      requisitionRequest.setFundManager(requisitionRequest.getUserId()); 
      // FIXME might have to search using param level as well 
      SystemDefault sysDefault = dbFuncs.references.systemDefault 
        .findByCompanyAndDivisionAndPortfolio(
          userContext.getCompany(), 
          userContext.getDivision(), 
          requisitionRequest.getPortfolio()); 
      requisitionRequest.setCustodianN(sysDefault.getCustodianN()); 

      gateKeeper.route(requisitionRequest); 
     } 
    } 

現在我想使用Java反射在運行時間測試方法是否工作正常,像單元測試。

我試着寫上面的TestNG,由於我們有項目體系結構,因此我決定使用反射來測試[though which is not a good way of doing this and later we will find the solution for this]

我的問題是如何爲該方法創建一個java反射類,並調用上述方法並將URL /trade/createrequisition發送到服務器,無論它是否可供登錄用戶訪問。

如何做到這一點。

回答

1

如果你想檢查安全性註釋是否添加在方法上,那麼在使用java反射API的單元測試用例中,你可以這樣做。

使用反射和該檢查method.getAnnotation(PreAuthorize.class)

找到方法但實際上,你應該測試這個作爲一個集成/功能性測試。