gpt4 book ai didi

java - @Before 和 @After 排除

转载 作者:行者123 更新时间:2023-12-02 13:37:04 30 4
gpt4 key购买 nike

我正在为我的 DAO 编写一些测试,因为很多测试使用保存到我的数据库中的测试对象,所以我使用注释 @Before 和 @Before 创建了 setup() 和teardown() 方法@After 分别以避免冗余代码,但其中一个测试(实际上并不真正需要测试对象)调用 DAO 中的一个方法,其中包含调用 getCurrentSession().clear() (这是一种使用 ScrollableResults 的方法)批量从数据库获取数据,并避免内存填满,每 50 行调用一次lush()和clear()。这会产生一个问题,因为clear()实际上从 session 中删除了setup()中创建的测试对象,因此当调用teardown()时我收到错误:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [nl.ru.cmbi.pdbeter.core.model.domain.PDBEntry#395]

有没有办法告诉 JUnit 在这个测试中不要使用 setup() 和teardown(),或者最好将所有实际上不需要 setup() 和teardown() 的测试放在一个新的测试类?

最佳答案

首先,是的,在单独的测试中隔离不需要 @Before@After 行为的测试非常有意义。

其次,您可能想查看 Spring Framework's support for running unit tests within a database transaction在每个测试结束时自动回滚,这样您就不必担心某些测试会影响外部资源的状态,或者询问每个顺序正在运行哪些测试等问题。将其与内存数据库(如 HSQL ),您甚至不需要担心在某个地方有一个正在运行的数据库来运行,从而使您的构建更加可移植。

关于java - @Before 和 @After 排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4078180/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com