Spring测试不会将数据存储在数据库中

时间:2015-04-16 23:06:17

标签: java spring hibernate dao spring-test

我正在使用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());
    }
}

当我运行测试时,测试成功。但是,当我去查看数据库时,在测试期间没有数据存在。看起来Spring在我不知情的情况下运行内存数据库。

无论如何都要确保数据持久存储到数据库中?

2 个答案:

答案 0 :(得分:2)

config = @SqlConfig(transactionMode = ISOLATED)添加到@SQL注释中,以便在单独的事务中运行sql。

示例:

@Sql(
    scripts = "...",
    config = @SqlConfig(transactionMode = ISOLATED),
    executionPhase = ExecutionPhase.BEFORE_TEST_METHOD
)

Relevant Spring Documentation

答案 1 :(得分:1)

您可以将事务设置为不使用

回滚
@TransactionConfiguration(defaultRollback = false)