2016-04-26 8 views
0

Я пытаюсь заполнить таблицу базы данных DBUnit в рамках тестового теста Spring. Источником данных является TransactionAwareDataSourceProxy. Итак, я бы дал этому источнику DBUnit, и после этого заполнение таблицы должно быть видимым для запроса jdbcTemplate?Изменения DBUnit не отображаются внутри транзакции Весенний тест

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"many contexts"}) 
@TransactionConfiguration(transactionManager = "transactionManager") 
@Transactional 
public class DBTest { 

    @Autowired(required = true) 
    TransactionAwareDataSourceProxy dataSource; 

    private JdbcTemplate jdbcTemplate; 

    @Autowired(required = true) 
    public void setJdbcTemplate(TransactionAwareDataSourceProxy dataSource) { 
     this.jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    @Autowired(required = true) 
    SessionFactory sessionFactory; 

    @Test 
    @Transactional 
    public void test() throws Exception { 
     IDatabaseConnection dbConn = new DatabaseDataSourceConnection(dataSource); 
     DatabaseOperation.CLEAN_INSERT.execute(dbConn, new XmlDataSet(ClassLoader.getSystemResourceAsStream("TABLE.xml"))); 

     System.out.println("Es wurden gefunden : " + this.jdbcTemplate.queryForInt("select count(*) from TABLE")); 
     System.out.println("blaaa"); 

    } 

Запрос всегда возвращает 0. Что мне не хватает?

ответ

0

Вид решения .... Я изменил версию DBUnit с 2.4.9 до 2.5.2, теперь все работает нормально.

+0

Звучит неплохо, ошибка исправлена! :-) – Jeff

0

Я видел это, когда dbUnit и производственное приложение используют один и тот же транзакционный/источник данных. Что «исправляет» это «флеш», либо вручную вызывая флеш в тесте, либо используя отдельную транзакцию или соединение db (так что изменения dbUnit сбрасываются).

+0

Я попробовал sessionFactory.getCurrentSession(). Flush(); после чистой вставки. Нет разницы :( –