如何解决Easymock 不保留方法的注释
我试图模拟一个具有一些带有注释的公共方法的类(它实际上是一个 SpringBoot @RestController 类型的类)。
当我模拟它并使用 expect
来处理少数带有注释的方法时,我发现 Easymock 丢失了注释并且我的代码中断了。
是 EasyMock 的限制还是我需要做些什么才能让它工作?
编辑: 这是我试图模拟的课程片段:
@CrossOrigin
@RestController
@RequestMapping(path = "/users")
public class UsersController {
@RequestMapping(
path = "/getUsers",method = RequestMethod.GET,consumes = MediaType.APPLICATION_JSON_VALUE,produces = MediaType.APPLICATION_JSON_VALUE)
public List<User> getUsers(@RequestBody UserRequest userRequest,HttpServletRequest request) {
...
}
...
}
模拟测试代码:
@Test
public void testGetUsers() throws Exception {
UserController controller = createMock(UserController.class);
expect(controller.getUsers(userRequest,httpRequest)).andReturn(Collections.emptyList());
replay(controller);
...
verify(controller);
}
我做了一个简单的检查,我没有传递模拟实例,而是传递了一个实例化的实例,它运行良好!所以我的结论是,当模拟一个在方法上有注释的类时,它会丢失注释。
顺便说一句,我使用的是easymock 3.4
编辑 2:
public void testGetUsers() throws Exception {
UserController controller = createMock(UserController.class);
expect(controller.getUsers(userRequest,httpRequest)).andReturn(Collections.emptyList());
replay(controller);
Method[] methods = controller.getClass().getmethods();
if(methods[0].isAnnotationPresent(RequestMapping.class) == false) {
System.out.println("FOUND THE PROBLEM!!");
}
谢谢!
解决方法
模拟是一件简单的事情。它扩展了一个类并覆盖了所有方法。注释不会添加到生成的类中。因为你在嘲笑一种行为。模拟并不意味着传递给注释处理器。
没有什么可以阻止它,只是 20 年来没有人需要该功能。我很想知道您为什么需要它的完整示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。