【发布时间】:2017-12-26 11:13:45
【问题描述】:
在 Spring Boot 中,我尝试创建我的第一个事务测试,但事务不起作用。
@TestPropertySource(locations = "classpath:test.properties")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringJUnit4ClassRunner.class)
//@RunWith(SpringRunner.class)
@Transactional
@TestExecutionListeners(
mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS,
listeners = {TransactionalTestExecutionListener.class}
)
public class IntegrationTests
{
@Autowired
TemperatureLogRepository temperatureLogRepository;
@Test
@SqlGroup({
@Sql(
executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD,
config = @SqlConfig(transactionMode = ISOLATED),
scripts = "classpath:sqls/insertRecords2.sql"
)
})
public void firstRepoTest() throws SQLException
{
assertThat(temperatureLogRepository.getFullList().size()).isEqualByComparingTo(0);
}
}
我知道SqlGroup不是必须的,但是会添加更多的文件。
我现在拥有的:
- SQL 文件执行良好并插入数据库。
-
getFullList()方法可以读取它并返回正确的数据。 - 测试后我的数据库里还有数据,事务没有回滚。
我不确定它们是否在同一个事务中运行。是否可以在getFullList()方法运行之前将数据提交到db?
我需要什么:
-
@Sql将数据插入到事务中。 -
getFullList()从事务中读取数据。 - 测试返回的数据。
- 回滚交易。
【问题讨论】:
标签: java spring spring-boot transactions integration-testing