java - @Transactional 注解覆盖了 Mockito 的 InjectMocks
问题描述
在类 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 重写模拟?
解决方案
我认为您应该删除 @Autowired 注释。
推荐阅读
- python - pyinstaller:AttributeError 模块“webbot”没有属性“数据”
- ios - Healthkit:设置“enableBackgroundDelivery”,但当某些设备上的用户有新的健康数据时,iOS 根本不会唤醒应用程序
- java - [Android]: java.lang.NoSuchFieldError: No field error_color_material
- java - What is a good way to display status of a file using Swing
- python - DataFrame - 带标准的逐行算术
- javascript - Search key and return value in nested object
- reactjs - 类未应用于输入元素 reactjs
- cucumber - How to validate a REST Assured request across multiple java methods?
- c++ - 在浅拷贝上调用删除不会爆炸
- javascript - 谷歌翻译中不显示文本区域建议框中的 Onkeypress