首页 > 解决方案 > 如何使用 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(???);
}

标签: unit-testingspring-boottestingjunitjunit4

解决方案


推荐阅读