【问题标题】:@Transactional annotation overwrites Mockito's InjectMocks@Transactional 注解覆盖了 Mockito 的 InjectMocks
【发布时间】:2021-07-02 12:25:12
【问题描述】:

在类TeacherDao方法create()调用AddressDao.create():

public void create(Teacher teacher) {
    addressDao.create(teacher.getAddress());
    // Teacher is being written to database...
}

我正在为 TeacherDao 类编写 Junit5 测试,因此 AddressDao 被替换为模拟。 我调用 TeacherDao.create() 并验证 AddressDao.create() 正在交互:

@Mock
private AddressDao addressDao;
@InjectMocks
@Autowired
private TeacherDao teacherDao;
@Test
void teacherDaoCreateTest() {
     teacherDao.create(teacher);
     verify(addressDao).create(testAddress);
}

验证成功。 之后,我将 @Transactional 注释添加到 TeacherDao.create() 方法,测试失败。 AddressDao 模拟现在具有零交互,并且 testAddress 正在实际写入数据库。 我不完全理解@Transactional 是如何深入工作的,而且一定遗漏了一些重要的东西。为什么@Transactional 重写模拟?

【问题讨论】:

  • 你使用哪个 mockito 版本?
  • Mockito ver.3.8.0.
  • 你看这里的答案了吗? stackoverflow.com/questions/21124326/…
  • 我做到了,这个问题是 8 年前提出的,Mockito 和 Spring 可能会走得很远。

标签: java transactions mockito junit5


【解决方案1】:

我认为你应该删除@Autowired 注释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多