java - 我应该为 DAO 测试类使用@Transactional 还是@Rollback?

标签 java spring testing junit dao

我的数据库有一个 Dao 层。现在,我正在为它编写一些集成测试。我想知道是否应该在测试类中使用 @Transactional@Rollback,因为它们都将更改还原到数据库。哪一个是好的做法,在什么条件下

我尝试同时使用它们,它们都适用于我的情况。我的类中有一个带@Before 注释的方法。

@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(但你的服务层)这意味着你通过测试调用的所有服务层/持久层方法将开始他们自己的交易(你让他们交易,没有你?)并在提交时刷新更改。所以你一定会注意到刷新时是否有什么东西爆炸了,而且很可能在一段时间后,一个充满垃圾测试数据的数据库

关于java - 我应该为 DAO 测试类使用@Transactional 还是@Rollback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55948378/

相关文章:

java - 如何模拟返回文件的方法

java - 使用多线程写入单个文件

java - Log4j2 无法使用 Spring Boot 找到日志记录实现

java - 在 droid 中,我如何不仅捕获异常

java - Spring 配置文件默认行为

java - 为列表中的每个项目重复 Spring Batch 流程的步骤

java - 匹配 Spring RequestMapping 中的任何内容

unit-testing - 如何通过 JEST 检测模拟依赖库中的调用?

c++ - 为 Qt 测试设置超时

java - HTTP组件编码问题