![](/img/trans.png)
[英]the @target annotation does not work when i work with spring aop
[英]@injectMocks does not work when using spring aop
我正在写junit并使用@mock和@injectMock。但是,我发现@injectMocks在春季aop.code中的bean像这样时不起作用:
QuestionService.java:
@Component
public class QuestionService implements IQuestionService{
@Resource
private IUserService userService;
@Override
public User findUserById(long id) {
// TODO Auto-generated method stub
User user = userService.findUserById(id);
return user;
}
}
Test.java:
@Mock
IUserService mockuserService;
@InjectMocks
@Resource
QuestionService questionService;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void testfind() {
when(mockuserService.findUserById(1)).thenReturn(
new User(1, "name"));
User user = questionService.findUserById(1);
Assert.assertEquals(new User(1, "name"), user);
}
有用!
但是,当我在spring aop中添加userService时,它不起作用!
例如,交易aop。
我该如何解决?
为什么在测试类中用@Resource
注释QuestionService
? 您是否通过加载bean配置与SpringJUnit4ClassRunner
运行? 如果不删除@Resource
注释并尝试,则不管是否使用AOP都应该起作用。
并在测试类的@Before
方法中的第一行代码下面添加代码段。
MockitoAnnotations.initMocks(this);
@InjectMocks :标记应在其上进行注射的字段。 MockitoAnnotations.initMocks(this) :初始化带有Mockito批注的字段。
我发现了一个有趣的行为-一旦我在类中的任何方法周围使用了AOP,模拟就停止了工作。 相反,尽管没有代码可以启动“真实”组件。 我发现,如果您要使用@MockBean-一切正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.