gpt4 book ai didi

java - 单元测试中的@Transactional 阻止调用@PostLoad

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:23 25 4
gpt4 key购买 nike

我有以下测试:

public class Book
{
public boolean postLoadInvoked;
@PostLoad
private void onPostLoad()
{
postLoadInvoked = true;
}
}

public class MyIntegrationTest extends AbstractIntegrationTest
{
@Autowired
private BookDAO bookDAO;

@Test
public void loadBooks()
{
Book book = bookDAO.findOne(...);
assertTrue(book.postLoadInvoked);
}
}

此测试按原样通过,但如果我将 @Transactional 注释添加到测试类,它会失败:

@Transactional
@TransactionConfiguration(defaultRollback=true)
public class MyIntegrationTest extends AbstractIntegrationTest

为什么使用 @Transactional 配置测试会影响 JPA 回调方法?

编辑

DAO 只是一个 Spring Data 存储库,因此没有逻辑:

public interface BookDAO extends
JpaRepository<Book, Long>,
QueryDslPredicateExecutor<Book> {}

事务管理器也有一个标准配置:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value>com.mangofactory.example</value>
</list>
</property>
<property name="persistenceUnitName" value="spring-test" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.H2Dialect" />
</bean>
</property>
</bean>

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1" />
</bean>

最佳答案

我不确定您使用的 spring 版本是什么,或者 AbstractIntegrationTest 是否正在扩展某些东西,但要检查的一件事是,在您的层次结构中,您的测试应该扩展一些抽象事务上下文感知 spring 测试类。

我正在考虑的类:

org.springframework.test.AbstractTransactionalSpringContextTests
org.springframework.test.AbstractTransactionalDataSourceSpringContextTests

或一些 jUnit 风格(取决于您使用的版本):

org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests
org.springframework.test.context.junit38.AbstractTransactionalJUnit38SpringContextTests

关于java - 单元测试中的@Transactional 阻止调用@PostLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11999825/

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