繁体   English   中英

使用Spring AOP时@injectMocks不起作用

[英]@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM