2013-04-05 127 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)

找到方法但实际上,你应该测试这个作为一个集成/功能性测试。