unit-testing - 如何使用 REQUIRES_NEW 和 DB 中的约束为服务方法编写 UnitTest
问题描述
如何为此方法创建 UnitTest?
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Override
public Charge saveInNewTransaction(Charge charge) {
if (charge.getIsDuplicate()) {
charge.setIsActive(false);
} else {
Charge chargeOrigin = charge.getChargeOrigin();
chargeOrigin.setIsActive(false);
chargesRepository.saveAndFlush(chargeOrigin);
}
return chargesRepository.saveAndFlush(charge);
}
我有限制 - 只有一个可以isActive = true
我不知道如何为这种方法编写测试。
简要背景。我得到了一个收费列表,例如 10 并且在一个循环中我尝试保存它们。如果我得到一个约束异常 - 我需要忽略它(并继续保存另一个费用。我不需要回滚主事务)。
因此我有一个在REQUIRES_NEW
事务中执行的方法。
编辑
我尝试:
@MockBean
private ChargeRepository chargeRepository;
@Before
public void setUp() throws Exception {
chargeService = new ChargeServiceImpl(chargeRepository);
}
@Test
public void saveInNewTransaction() {
Charge charge = new Charge();
charge.setIsDuplicate(true);
Charge originCharge = new Charge();
originCharge.setIsDuplicate(false);
charge.setChargeOrigin(originCharge);
//when(???).thenReturn(???);
Charge savedCharge = chargeService.saveInNewTransaction(testCharge);
//assertThat(???);
}
解决方案
推荐阅读
- angular - Angular (service provider)
- bash - Mac: Virtual Shell Bash Version does not Match Installed Version
- android - 蓝牙在我的应用程序 Android 6.0(API 23) 到 Android 7.0(API 24) 中不起作用
- java - 使用stream api修改传递的参数
- node.js - TypeScript - '{}' 类型的参数不可分配给'{}' 类型的参数 - MongoStore
- apache-beam - Apache Beam - 你如何从一个无界的 PCollection 中创建一个有界的 PCollection?
- ios - Firebase 实时数据库 iOS 删除键
- x86 - 如何使用 CPU 本身判断 x86-64 指令操作码的长度?
- r - 我想按一列汇总,然后取一列的总和和另一列的平均值
- python - 为什么不同的 URL 在 Django 2.0 中呈现相同的视图?