Spring 测试不在数据库中存储数据
Spring Tests Do Not Store Data in Database
我正在 运行 对 Spring 的游戏进行一些测试,但由于某些原因 sql 文件中的数据没有保存到数据库中。这是我的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {HibernateConfigTest.class})
@Transactional
@Sql(scripts = {"api_routes.sql",
"profile.sql",
"status.sql",
"user.sql",
"game_token.sql",
"game.sql",
"message.sql"},
executionPhase = ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = "delete_data.sql",
executionPhase = ExecutionPhase.AFTER_TEST_METHOD)
public class GameDaoTest {
@Autowired
private GameDao gameDao;
@Test
public void testGetGamesByTokenId() {
assertEquals(36, gameDao.getGamesByTokenId(null).size());
}
}
当我运行测试时,测试成功。但是,当我去查看数据库时,在测试期间 none 数据就在那里。似乎 Spring 在我不知情的情况下 运行 在内存数据库中运行。
有没有办法确保数据持久化到数据库中?
将 config = @SqlConfig(transactionMode = ISOLATED)
添加到 @SQL
注释,以便 sql 在单独的交易中成为 运行。
示例:
@Sql(
scripts = "...",
config = @SqlConfig(transactionMode = ISOLATED),
executionPhase = ExecutionPhase.BEFORE_TEST_METHOD
)
您可以使用
将事务设置为不回滚
@TransactionConfiguration(defaultRollback = false)
我正在 运行 对 Spring 的游戏进行一些测试,但由于某些原因 sql 文件中的数据没有保存到数据库中。这是我的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {HibernateConfigTest.class})
@Transactional
@Sql(scripts = {"api_routes.sql",
"profile.sql",
"status.sql",
"user.sql",
"game_token.sql",
"game.sql",
"message.sql"},
executionPhase = ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = "delete_data.sql",
executionPhase = ExecutionPhase.AFTER_TEST_METHOD)
public class GameDaoTest {
@Autowired
private GameDao gameDao;
@Test
public void testGetGamesByTokenId() {
assertEquals(36, gameDao.getGamesByTokenId(null).size());
}
}
当我运行测试时,测试成功。但是,当我去查看数据库时,在测试期间 none 数据就在那里。似乎 Spring 在我不知情的情况下 运行 在内存数据库中运行。
有没有办法确保数据持久化到数据库中?
将 config = @SqlConfig(transactionMode = ISOLATED)
添加到 @SQL
注释,以便 sql 在单独的交易中成为 运行。
示例:
@Sql(
scripts = "...",
config = @SqlConfig(transactionMode = ISOLATED),
executionPhase = ExecutionPhase.BEFORE_TEST_METHOD
)
您可以使用
将事务设置为不回滚@TransactionConfiguration(defaultRollback = false)