データベースからデータを読み取って変換するクラスの Testclass を作成したいと考えています。テストクラスは、この変換関数をテストする必要があります。しかし、この関数をテストするには、ResultSet オブジェクトが必要です。
データベースに接続せずに ResultSet オブジェクトにデータを入力するにはどうすればよいですか?
データベースからの読み取りは、単体テストではなく、統合テストに関連しています。したがって、統合テストでは実際のバックエンド (データベースなど) が考慮されるため、オリジナルを使用できますし、使用する必要があります。ResultSet
ロジックの単体テストを試みる場合は、テスト対象のサンプル データを返すために、特定の DAO 呼び出し部分をスタブまたはモックします。ResultSet
ただし、この場合は データベースをまったく呼び出さないでください (を扱わないでください)。
以下のコードのようなもの: Db アクセス用のインターフェイスが必要です。コードとテスト コードで使用するこのインターフェイス: myDbConnectionMock は、Db 接続と同じインターフェイスを持つ Mock オブジェクトですが、作成するオブジェクトであり、必要なものを入力できます。
私はMockitoまたはさらに悪いEasyMockを使用しません。
texteditor に入力したコード (うまくいけばコンパイル可能ですが、そうでないかもしれません):
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;
}
}