2011-04-20 21 views
0

我目前正試圖測試(單元測試)連接到數據庫中的類測試數據庫連接,查看代碼:與DriverManager的(JAVA)

public Connection getConnection() { 
    System.out.println("Conectando ao banco"); 
    try { 
     return DriverManager.getConnection("jdbc:postgres://localhost/banco", "root", ""); 
    } catch(SQLException e) { 
     throw new RuntimeException(e); 
    } 
} 

我喜歡知道我可以嘲笑(JMock的),它,但DriverManager不是一個界面,所以我不能嘲笑這個類,所以我怎麼能做這個測試?

回答

1

我看不出嘲笑這一點。如果你的目標是測試你是否可以連接到數據庫,你用模擬證明了什麼?絕對沒有,IMO。

通過建立連接,執行操作和回滾更改來測試持久性類。

一旦工作,在測試服務時模擬持久類就非常合適,因爲您已經測試了持久性內容。

但是你提出的建議太過分了,國際海事組織。只要運行你的測試,並繼續下去。

+0

當然,你是對的,但我怎麼能測試插入和更新例如沒有觸及數據庫。不是? – elf 2011-04-21 00:27:57

+0

如果您未觸摸數據庫,則不會測試任何內容。你做不到。所以編寫測試。 – duffymo 2011-04-21 11:26:02

0

所以你可以重新考慮你的設計。 DAO可以是持久性和業務邏輯之間的抽象層。它可以幫助你進行單元測試。

0

我知道這是一個較老的問題,但在處理相關問題時碰到它。

兩個策略,可能會爲你工作:

1)你的對象上模擬出getConnection()讓你直接返回模擬連接。根據你的確切用例,有幾種不同的方法可以做到這一點,但原則上它是相對簡單的。

2)改變你的嘲笑框架,並利用PowerMock,它可以讓你嘲笑對象的靜態方法。它不會與DriverManager專門工作,但您可以在另一個可以使用的類中爲此調用構建一個包裝器。