我正在做Spring Boot的单元测试。据我所知,它会在开始时自动打开事务并在结束时回滚。但是,我没有看到事务在数据库下打开。
以下是 Spring 应用程序的一些日志:
[DEBUG] [AbstractPlatformTransactionManager.java]getTransaction(370) : Creating new transaction with name [...]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
[INFO ] [TransactionContext.java]startTransaction(107) : Began transaction (1) for test context [DefaultTestContext@25bc65ab testClass...]
[DEBUG] [AbstractPlatformTransactionManager.java]processRollback(833) : Initiating transaction rollback
[INFO ] [TransactionContext.java]endTransaction(139) : Rolled back transaction for test: [DefaultTestContext@25bc65ab testClass...]
在测试运行时,我在数据库上运行了以下查询:
SELECT * FROM information_schema.innodb_trx;
但尚未列出任何交易。
测试很简单
@MyMapperTest
public class MapperTest {
@Autowired
private DbMapper mapper;
@Test
void test() {
mapper.insert(getDummyData());
}
}
@MyMapperTest
的注释是:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@MybatisTest(excludeAutoConfiguration = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages = { ... })
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
测试很简单,所以可能不是因为AOP代理问题。
更多信息:
LazyConnectionDataSourceProxy
非常感谢!
我预计数据库必须列出一个事务并且插入的数据必须回滚。
另外,我也尝试过:
@Transactional
添加到测试中