运行 集成测试后如何删除非事务性数据库日志记录?
How to remove non-transactional database logging after running integration tests?
我正在开发一个需要将审核日志写入数据库的 Java/Spring 应用程序。所有服务当前都标记为 @Transactional
- 因此如果出现故障,更改将回滚。
但审计日志记录是个例外——它应该总是成功的——所以一直在考虑将 AuditLogService 标记为 Propagation.NOT_SUPPORTED
或 Propagation.REQUIRES_NEW
。
问题是如何设计集成测试。理想情况下,这些不应在数据库中留下日志条目。宁愿不必在测试结束时手动删除它。是否有一种方法可以将测试标记为事务性的,其中包括所有事务,包括通过 Propagation.REQUIRES_NEW
开始的事务?
我最终完全按照我说的我不想做的去做,并在每次测试结束时删除了所有操作数据。 (这实际上效果更好,因为测试不再 运行 在总体事务中,这掩盖了一些错误,例如与 Hibernate 延迟加载相关的错误。)
我正在开发一个需要将审核日志写入数据库的 Java/Spring 应用程序。所有服务当前都标记为 @Transactional
- 因此如果出现故障,更改将回滚。
但审计日志记录是个例外——它应该总是成功的——所以一直在考虑将 AuditLogService 标记为 Propagation.NOT_SUPPORTED
或 Propagation.REQUIRES_NEW
。
问题是如何设计集成测试。理想情况下,这些不应在数据库中留下日志条目。宁愿不必在测试结束时手动删除它。是否有一种方法可以将测试标记为事务性的,其中包括所有事务,包括通过 Propagation.REQUIRES_NEW
开始的事务?
我最终完全按照我说的我不想做的去做,并在每次测试结束时删除了所有操作数据。 (这实际上效果更好,因为测试不再 运行 在总体事务中,这掩盖了一些错误,例如与 Hibernate 延迟加载相关的错误。)