2015-04-16 2 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

Я далек от того из знающих о весеннем платформе, но мне интересно, о ' @Sql (scripts = "delete_data.sql", executePhase = 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

Так что это работает, но мне нужно добавить этот оператор config к удалению аннотации sql. –

1

Вы можете установить вам сделку не откат, используя

@TransactionConfiguration(defaultRollback = false) 

 Смежные вопросы

  • Нет связанных вопросов^_^