2014-04-03 37 views
3

我的同事程序員的問題。我需要測試一個SQL語句將截斷表而不實際截斷表。我知道在截斷它之前我需要禁用約束,但是我卻不知道如何實際截斷表而不會實際導致對錶的「永久損壞」。JUnit,如何測試截斷表

對不起,如果它已被問及,並提前致謝!我忘了提及,我使用Maven,MyBatis,Oracle DB和Spring(Aspect,Batch)。此外,代碼的工作原理,但在JUnit的上下文中,該方法需要進行測試。儘管我將如何斷言這是我將很快需要處理的另一個問題。

+0

取決於您的DBMS。在Postgres中,您可以執行截斷操作,檢查表是否爲空,然後執行回滾以恢復截斷。 –

+0

如果我想編寫測試來執行數據庫交互,我通常會創建一個單獨的測試模式,我甚至可以在每次測試之間刪除和重新生成模式。這樣我真的不在乎我是否真的傷害了桌子。 –

+0

是否要測試程序是否向數據庫發出了正確的SQL命令,或者SQL命令是否在數據庫上正常工作? –

回答

4

考慮使用inmemory數據庫引擎進行單元測試,例如Derby。這應該允許您在不損壞真實數據的情況下截斷表格。一個好的方法是使用不同的驅動程序進行生產和測試。如果你使用像Hibernate這樣的ORM框架,這種方法特別方便。

2

雖然我同意阿列克謝在內存數據庫很好,我也建議你測試你的代碼在真正的數據庫。然而,沒有(據我所知)的方式來測試,看看它是否真的工作,而不真正截斷表。

測試數據庫的建議。

  1. 確保你的模式是在一個版本的文件,你可以簡單地上傳到一個實例,並有一個工作的生產環境,爲您的服務/應用
  2. 確保您可以自動旋轉了一個空數據庫實例
  3. 能夠拍攝生產環境的快照以用於測試。

如果您已經完成了這些工作,您可以在不轉到生產環境的情況下針對您的數據庫設置一套相當不錯的測試套件。

我已經寫了很多自動化測試,針對一個真正的postgresql實例使用生產模式,這樣的工作。

  1. 啓動postgresql服務器。
  2. 將架構上載到數據庫。
  3. 插入測試數據。
  4. 運行一些測試。
  5. 殺死postgresql服務器。
  6. 清理文件。

UPDATE:

旋轉起來,你會

  1. 創建包含該數據庫文件的文件夾數據庫中使用initdb的 http://www.postgresql.org/docs/9.3/static/app-initdb.html

  2. 啓動Postgres的過程,將它指向那些文件http://www.postgresql.org/docs/8.2/static/server-start.html

您可能需要調整postgresql.conf和pg_hba.conf中的安全設置(這也應該是自動的);

+0

我需要問一下,「啓動」postgresql服務器是什麼意思? – zeontestpilot

+0

我添加了更新。希望有所幫助。 –