2016-04-26 20 views
0

私は、Spring Transactional TestでDBUnitを使用してデータベーステーブルを作成しようとしています。 データソースはTransactionAwareDataSourceProxyです。だから、私はDBUnitにこのソースを与え、テーブルを埋めるよりjdbcTemplateクエリの後に表示する必要がありますか?トランザクションのSpringテストで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()を試してみました。クリーンインサートの後。違いはありません:( –

関連する問題