小编Nic*_*ico的帖子

如何JUnit测试@PreAuthorize注释及其弹簧MVC控制器指定的弹簧EL?

我在Spring MVC Controller中定义了这个方法:

@RequestMapping(value = "{id}/content", method=RequestMethod.POST)
@PreAuthorize("principal.user.userAccount instanceof T(com.anonym.model.identity.PedagoAccount) AND principal.user.userAccount.userId == #object.pedago.userId AND #form.id == #object.id")
public String modifyContent(@PathVariable("id") Project object, @Valid  @ModelAttribute("form") ProjectContentForm form) {
    ....
}
Run Code Online (Sandbox Code Playgroud)

然后在我的JUnit测试中,我想调用此方法并确保验证PreAuthorize条件.但是当我在JUnit测试中使用错误帐户设置用户主体时,没有错误,方法完成.似乎绕过了注释.
但是当我以正常方式调用此方法(而不是测试)时,将验证PreAuthorize.

如果可能的话,如何在junit测试中测试这个注释以及如果它抛出一个异常如何捕获它?

谢谢,
尼古拉斯

junit controller spring-mvc spring-security spring-el

10
推荐指数
1
解决办法
1万
查看次数

如何对spring mvc控制器发送的ResponseBody或ResponseEntity进行单元测试?

当我做junit测试时,我会做这样的事情来测试spring mvc控制器:

request.setRequestURI("/projects/"+idProject+"/modify");
ModelAndView mv = handlerAdapter.handle(request, response, controller);
Run Code Online (Sandbox Code Playgroud)

控制器测试的地方如下:

@RequestMapping(value = "{id}/modify")
public String content(ModelMap model, @PathVariable("id") Project object) {
Run Code Online (Sandbox Code Playgroud)

但我没有找到如何得到如下ResponseBody定义的请求处理程序的答案:

@RequestMapping("/management/search")
public @ResponseBody ArrayList<SearchData> search(@RequestParam("q")) {
        ....
                ....
        ArrayList<SearchData> datas = ....;

        return datas;
    }
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing spring-mvc

5
推荐指数
1
解决办法
1万
查看次数