使用spring aop时@injectMocks不起作用

时间:2015-10-19 02:23:29

标签: java spring junit mockito spring-aop

我正在编写junit而且我正在使用@mock和@injectionMock.But,我发现@injectMocks在spring 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。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

为什么在测试类中使用QuestionService注释@Resource?你是否通过加载bean配置运行SpringJUnit4ClassRunner?如果不删除@Resource注释并尝试,无论是否使用AOP,都应该有效。

并在测试类的@Before方法中添加以下代码段作为第一行。

MockitoAnnotations.initMocks(this);

@InjectMocks :标记应在其上执行注射的字段。 MockitoAnnotations.initMocks(this):初始化使用Mockito注释注释的字段。

答案 1 :(得分:0)

我发现了一个有趣的行为 - 一旦我在课堂上使用了任何方法的AOP,模拟就停止了工作;相反,真实的'组件已启动,尽管没有相关代码。 我发现如果你使用@MockBean - 一切正常。