java - @injectMocks 在使用 spring aop 时不起作用

标签 java spring junit mockito spring-aop

我正在编写junit,并且使用@mock和@injectMock。但是,我发现@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;
  }
}

测试.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。

如何修复它?

最佳答案

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

关于java - @injectMocks 在使用 spring aop 时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33205665/

相关文章:

java - 使用@ManyToMany 时如何将其他列添加到结果表中?

java - 使用java旋转pdfbox中的文本

java - Spring Boot - 执行器 - 映射 : only own handler

java - 无法在 xd-singlenode 上使用 spring-data-jpa 部署 spring-xd 处理器模块

java - 使用注释和@Valid的Spring表单验证

java - 为什么 IntelliJ Idea 无法识别我的 Spek 测试?

java - 在android中更改Imageview的大小

javascript - Spring启动WebSocket连接到 'ws://127.0.0.1:8081/getUsersList/'失败: Error during WebSocket handshake: Unexpected response code: 200

java - JUnit 和检查字段是否为空

java - System.out.println() 的 JUnit 测试