Cucumer/Arquillian 使用 H2 测试的不合逻辑结果
Illogical Results from Cucumer/Arquillian Test with H2
我在尝试为使用 JPQL 执行批量更新的新服务创建 Cucumber/Arquillian 测试时遇到问题。一切似乎都正常工作,除了我的 @Then
验证更改的代码。
我在我的特征文件中设置我的测试数据,它被添加到为每个测试在内存中创建的 H2 数据库。当批量更新运行时,它会根据该数据报告预期的更新计数。但是当我检索应该更新的对象之一时,该对象上的数据似乎没有变化。
请注意:当我在我的应用程序中针对我们的 Oracle 数据库执行服务调用时,它工作正常并且 table 按预期更新。问题似乎与内存数据库中的 H2 缓存有关。
Arquillian 部署到 JBoss 的我的数据源是:
<datasource enabled="true"
jndi-name="jdbc/arquillian"
pool-name="ArquillianEmbeddedH2Pool">
<connection-url>
jdbc:h2:mem:arquillian;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS TEST_DB
</connection-url>
<driver>h2</driver>
</datasource>
我的 Cucumber 测试定义了 @PersistenceContext(unitName = "localH2-testDB")
我的 persistence.xml 包含:
<persistence-unit name="localH2-testDB">
<jta-data-source>jdbc/arquillian</jta-data-source>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.cache.use_second_level_cache" value="false"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
</properties>
</persistence-unit>
我不知道我可以更改 H2 数据库的哪些其他设置以尝试消除任何缓存。
事实证明,问题是 JPA 中处理批处理更新的方式所固有的。他们不会像人们预期的那样更新持久性缓存。因此表已正确更新,但是当重新查询对象时,它没有更新。这就是为什么我的测试失败(一切都在同一个事务中)并且我部署的代码工作(单独的事务执行更新和重新查询数据)。
我在尝试为使用 JPQL 执行批量更新的新服务创建 Cucumber/Arquillian 测试时遇到问题。一切似乎都正常工作,除了我的 @Then
验证更改的代码。
我在我的特征文件中设置我的测试数据,它被添加到为每个测试在内存中创建的 H2 数据库。当批量更新运行时,它会根据该数据报告预期的更新计数。但是当我检索应该更新的对象之一时,该对象上的数据似乎没有变化。
请注意:当我在我的应用程序中针对我们的 Oracle 数据库执行服务调用时,它工作正常并且 table 按预期更新。问题似乎与内存数据库中的 H2 缓存有关。
Arquillian 部署到 JBoss 的我的数据源是:
<datasource enabled="true"
jndi-name="jdbc/arquillian"
pool-name="ArquillianEmbeddedH2Pool">
<connection-url>
jdbc:h2:mem:arquillian;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS TEST_DB
</connection-url>
<driver>h2</driver>
</datasource>
我的 Cucumber 测试定义了 @PersistenceContext(unitName = "localH2-testDB")
我的 persistence.xml 包含:
<persistence-unit name="localH2-testDB">
<jta-data-source>jdbc/arquillian</jta-data-source>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.cache.use_second_level_cache" value="false"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
</properties>
</persistence-unit>
我不知道我可以更改 H2 数据库的哪些其他设置以尝试消除任何缓存。
事实证明,问题是 JPA 中处理批处理更新的方式所固有的。他们不会像人们预期的那样更新持久性缓存。因此表已正确更新,但是当重新查询对象时,它没有更新。这就是为什么我的测试失败(一切都在同一个事务中)并且我部署的代码工作(单独的事务执行更新和重新查询数据)。