2009-10-21 66 views
0

dbUnit有一個奇怪的問題。 我使用dbUnit 2.4.4,java 1.6,Spring(作爲db連接池),Oracle 9爲我的項目進行了大約50次單元測試。 對於他們中的一些(當我運行一整套測試),我得到這樣的例外:dbUnit問題:java.sql.SQLException:已關閉語​​句

Closed Statement 
[junit] junit.framework.AssertionFailedError: Closed Statement 
[junit]  at com.myproj.DataAccess.Internal.BaseDAOTest.importToDb(Unknown Source) 
[junit]  at com.myproj.DataAccess.Internal.MyDAOTest.testGetBuyClientOrders(Unknown Source) 
[junit]  at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) 
[junit]  at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423) 
[junit]  at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137) 

importToDb方法加載測試數據從XML文件通過DbUnit的DatabaseOperation.REFRESH.execute方法數據庫,它在所有使用試驗。 如果我單獨運行這些測試問題,對他們來說沒有任何問題。 你有什麼想法嗎?謝謝!

+0

我們可以看到importToDb代碼清除超時?助教。 – 2009-10-21 15:03:11

+0

這裏是http://pastebin.com/mf19de0a – dbf 2009-10-21 15:07:28

回答

1

我想你的一些測試在清理時會關閉數據庫連接。下一個測試嘗試再次使用此連接進行導入並失敗。

+0

我沒有在任何測試中明確關閉連接。他們都使用Spring DAO庫中的jdbcTemplate,所以我不需要手動連接。導入功能中的連接已關閉,但對於所有測試,此功能都是相同的。 – dbf 2009-10-21 15:13:47

+0

你使用哪種數據源?它是'SingleConnectionDataSource'嗎? – tangens 2009-10-21 16:21:17

+0

來自我的Spring配置的數據源描述: <屬性名= 「driverClassName」 值= 「$ {jdbc.driver.class}」/> <屬性名= 「URL」 值= 「$ {jdbc.url}」/> <屬性名=「用戶名「value =」$ {jdbc.username}「/> < property name =「maxOpenPreparedStatements」value =「20」/> dbf 2009-10-21 17:40:36

1

當這發生在我身上,我們已經明確地配置了連接高速緩存使用兩個屬性狙擊持久連接:

AbandonedConnectionTimeout 
InactivityTimeout 

See Oracle's docs here regarding timeout properties

原來查詢+處理時間只是跳過這兩個屬性的合併(AbandonedConnectionTimeout + InactivityTimeout <查詢時間+結果集處理時間)。

爲了解決這個問題,你可以提高你的超時限制,或者你可以將它們設置爲0(默認值)