2011-10-25 29 views
0

我們正在嘗試解決測試工具上的一些問題,並且遇到了特定測試的問題,這些測試基本上測試了創建實體的功能,並進行了一些處理並將其存儲在數據庫(是的,CRUD中的C)。Fitnesse:測試沒有正確地進行清理

在fitnesse測試的tearDown部分,我們在該記錄上執行刪除語句。但是,沒有任何東西被刪除。

我們懷疑這可能是因爲在SUT提交其事務之前執行tearDown。因此,沒有什麼可以刪除的。

要嘗試和解決這個問題,我們正在一個可輪詢的JDBC刪除:

java.sql.Statement statement; 
/*creates a statement*/ 
do{ 
    recordsDeleted = statement.executeUpdate("delete..."); 
    Thread.sleep(INTERVAL); 
}while(recordsDeleted == 0); 

所以問題來了:

  • 當一個JDBC事務COMMITED?

在上面的代碼中,更新是在同一個事務上執行,還是爲每個迭代的do-while循環創建一個新的事務? (我傾向於認爲他們將在同一交易中執行,因爲java.sql.Connection持有commit,rollback,etc方法)。

  • 你可以爲這個問題提出另一種解決方案嗎?我認爲這很常見,但我的隊友並沒有在網上找到任何解決方案,只是「輪詢直到它被刪除或超時」的建議。

在此先感謝

回答

1

我看不出有什麼毛病你的循環開始。你在某個地方打電話給statement.close()吧?我認爲SUT是在另一個線程或遠程?你確定你的刪除標準與輸入相匹配嗎?你可以在另一個進程中檢查數據庫以查看創建是否將其傳送到數據庫?

就交易而言,它取決於數據庫,但通常默認情況下不存在交易。通常會啓用自動提交,以便每個單獨的語句立即執行並提交。如果您要想要啓用交易,那麼您需要禁用自動提交,然後致電databaseConnection.setSavePoint()。當調用commit()時,將進行交易。如果連接關閉(或調用rollback()),則事務回滾。