2012-11-29 57 views
2

我想爲一個類創建一個Testclass,它從數據庫中讀取數據並轉換它們。測試類應該測試這個轉換函數。但是我可以測試這個函數,我需要一個ResultSet對象。自己創建一個ResultSet對象

如何在沒有連接到數據庫的情況下在ResultSet對象中填充一些數據?

+1

Willkommen。嘗試使用mockito http://code.google.com/p/mockito/或http://www.easymock.org/。沃格爾在這裏做了一個很好的教程:http://www.vogella.com/articles/EasyMock/article.html – Rekin

回答

1

從數據庫讀取關注點集成測試而不是單元測試。因此,您可以並應該使用原始的ResultSet,因爲集成測試會考慮真實的後端(如您的數據庫)。

如果您嘗試單元測試您的邏輯,存根或模擬您的特定DAO稱爲部分,以便返回要測試的示例數據。但在這種情況下根本不要調用數據庫(不要處理ResultSet)。

1

類似於下面的代碼: 您需要一個用於您的Db訪問的接口。 你在代碼和測試代碼中使用此接口: myDbConnectionMock是具有像DB連接, 相同的界面模仿對象,但它是您創建一個對象,並在那裏你卡恩填寫你想要什麼:

我不會使用Mockito或更糟的EasyMock。

代碼我在文本編輯鍵入(希望可編譯,也許不是):

public void testDBConnection() { 

    IDataBaseConnection conn = new MyDbConnectionMock(); 

    conn.connect(); 
    Set<Result> result = conn.readData(); 

    assertTrue(result.size > 0); 
} 

其中

// Interface for DB connection, adapt to real DB connection 
    public interface IDataBaseConnection { 
     boolean connect(); 
     Set<Result> readData(); 
    } 

// DB connection Mock 
class MyDbConnectionMock implements IDbConnection { 
    public void connect() { 
    return true; 
    } 

    public Set<ResultSet> readData() { 
    Set<Result> resultSet = new HashSet<Result>(); 
    Result res1 = new Result(20); 
    resultSet.add(res1); 

    Result res1 = new Result(30); 
    resultSet.add(res2); 
    return resultSet; 
    } 
}