java - @Before 和 @After 排除

标签 java hibernate session junit

我正在为我的 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/

相关文章:

mysql - SQL转HQL语法如何?或者我可以直接使用 SQL 但我还想要 JSON 格式的结果吗?

mysql - 使用 c3p0 连接池时 MySQL 的最佳最大连接数设置是多少

spring - 如何从 Spring Boot 中的公共(public)类中获取 session ?

session - 使用 CNAME 跨域访问 session cookie

laravel - 使用 vue 和 laravel API 管理用户 session 数据的良好实践

java - 预配置的 netbeans 项目与 NoSuchMethodError hibernate 和 spring 冲突

java - Android 应用程序的多个实例打开 - 仅在 Touchwiz 上

java - 需要帮助按第二个元素然后按第一个元素对二维数组进行排序(Java)

java - Spring 数据 jpa 分离实体

java - 同一颜色不超过两种