我在做我的項目,使用Tomcat 7
,JSP
,Servlets
,Log4j
和MySQL
。如何在Java Web應用程序中使用DataSource測試DAO?
我把這個問題用了幾個小時沒有正確的答案。
如何使用DataSource
和JUnit
來測試我的DAO?
最近我發現了這個article,但不知道如何配置它以達到我的目的,也不知道它是否是一種很好的方法。
我有以下DAO層次:
而且我通過以下方式獲得DataSource
在AbstractRepository
:
...
protected final DataSource ds;
...
public AbstractRepository() {
DataSource dataSource = null;
try {
Context initContext = new InitialContext();
dataSource = (DataSource) initContext
.lookup("java:/comp/env/jdbc/mydb");
} catch (NamingException ex) {
LOG.error("Cannot obtain a connection from the pool", ex);
}
ds = dataSource;
}
...
你會產生的方式,一些代碼示例解決這個問題,例如對於Entrant Repository Test
?
我做空構造函數的原因是孩子們可以覆蓋數據源,如果他們需要的話,但如果孩子使用相同的數據庫,它可以使用父數據源。雖然我同意它很難測試。我目前的目標是使用JUnit(不使用其他測試框架) – marknorkin 2015-02-07 12:21:16
來測試它,如果我實現了您提出的構造函數,是否意味着每個孩子還需要使用DataSource參數創建此類構造函數?也許通過連接更好嗎? – marknorkin 2015-02-07 17:33:56
如果唯一聲明的構造函數是'AbstractRepository(DataSource)'構造函數,那麼每個子類將不得不顯式調用'super(DataSource)'。在其構造函數中。我建議在每個擴展'AbstractDatasource'的'MyRepository'中提供'MyRepository(DataSource)'構造函數。您的存儲庫不需要知道'DataSource'來自哪裏。 – AGV 2015-02-07 18:44:55