JPA 2.0 禁用单元测试的会话缓存

2024-03-14

我正在为我的服务编写单元测试。 G。 :

@Test
@Rollback(value = true)
public void testMethod()
{
   // insert test data

    myService.Method(); // read/write from DB

   // asserts go here
}

应用程序运行时,每次进入方法 A 时都会创建一个新事务。但是在单元测试执行期间 - 当测试 testMethod 输入时。所以方法A不会创建新的。 为了正确的测试,我需要在每次调用测试内的服务之前清除缓存。我不想在每个单元测试中调用任何服务之前编写 Session.clear() 。这里的最佳实践是什么?


EntityManager 有一个方法clear() http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#clear%28%29这将删除所有持久性上下文:

清除持久性上下文,导致所有托管实体分离。对尚未刷新到数据库的实体所做的更改将不会被持久化。

如果您在该方法之后立即调用查询,它将直接来自数据库。不是来自缓存。

如果您想在每次测试之前运行它,请考虑使用 JUnit@Rule http://junit.org/javadoc/4.10/org/junit/Rule.html通过子类化外部资源 http://junit.org/javadoc/4.10/org/junit/rules/ExternalResource.html并在每个上运行该方法before() or after()。您可以在所有数据库测试中重用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA 2.0 禁用单元测试的会话缓存 的相关文章

随机推荐