2015-04-16 58 views
0

我正在为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似乎不知道我在运行内存数据库。

无论如何要确保数据被持久化到数据库吗?

+0

我是从知识渊博的有关Spring平台远远不能回滚使用,但我想知道' @Sql(scripts =“delete_data.sql”, executionPhase = ExecutionPhase.AFTER_TEST_METHOD)' – jdphenix

+0

是什么让你想到这一点?测试通过很好。 –

回答

2

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

例子:

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

Relevant Spring Documentation

+0

问题在于测试完成后数据不会被删除。 –

+0

因此,这工作,但我需要将该配置语句添加到删除sql注释以及。 –

1

您可以设置交易

@TransactionConfiguration(defaultRollback = false)