我应该在DAO测试类中使用@transactional或@rollback



我为数据库有一个dao层。现在,我正在为此编写一些集成测试。我想知道是否应在测试类中使用@transactional @Rollback @rollback ,因为它们都还原了数据库的更改。哪一个是良好的做法,在什么情况下

我尝试使用两者,他们都在我的情况下工作。我的班级有一个@be的注释方法。

@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(replace = NONE)
@DataJpaTest
// @Transactional or @Rollback?
public class TestDao {
    @Autowired
    private ConcreteDao concreteDao;
    @Before
    public void cleanUp(){ . . . }
    @Test
    public void testSaveAllEntries(){ . . . }
    // and other tests
}

同意@michael不会完全进行测试 @transactional(但是您的服务层(这意味着您通过测试调用的所有服务层/持久性层方法都会启动自己的启动交易(您使它们交易,是吗?(,并在提交时冲洗了更改。因此,您可以保证注意到是否有些东西爆炸了,很可能过了一段时间后,一个装满垃圾测试数据的数据库

使用数据库运行测试通常会通过集成测试完成。为了简单起见,您可以使用所需的方言设置H2。准备数据库结构并运行您需要的服务调用。断言预期结果并将测试方法标记为污垢上下文(作为注释(,或在每个测试中重置数据库,否则保存的测试结果可能会影响另一项测试。通过这种方式,您还可以测试服务的交易处理。

在测试中添加交易将改变您的业务逻辑行为。将这些放在测试中。

最新更新