JPA 2.0禁用会话缓存以进行单元测试

Mar*_*ark 3 java unit-testing translation jpa

我正在为我的服务编写单元测试,例如:

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

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

   // asserts go here
}
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lex 5

EntityManager有一个方法clear(),它将删除所有持久性上下文:

清除持久性上下文,使所有受管实体分离。对尚未刷新到数据库的实体所做的更改将不会保留。

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

如果要在每次测试之前运行此方法,请考虑使用JUnit @Rule,方法是对ExternalResource进行子类化,然后在every before()或上运行该方法after()。您可以在数据库测试中重用它。