web-dev-qa-db-ja.com

Javaモックデータベース接続

Makedb接続でクラスをテストしたい。テストしたいクラスは、コンストラクターConnectionクラスのパラメーターとして受け入れます。モックオブジェクトをコンストラクターに渡したい。 db接続をモックする方法の例で良いフレームワークを教えてもらえますか?

13
nyanev

[〜#〜] jdbc [〜#〜] をサポートする MockRunner を使用できます。 Mockito のような一般的なモックフレームワークも機能しますが、JDBCは相互に戻るインターフェイスのセットであるため、ハンドモックは困難です。自分の目で確かめてください: JDBCResultSetをスタブ/モックしてJava 5と6? の両方で機能させる方法

ただし、JDBCのモックは(使用するツールに関係なく)非常に脆弱で冗長であるため、薄いDAOレイヤー内でJDBCアクセスを抽象化することをお勧めします(@ duffymoの回答を参照)。 H2 のようなインメモリデータベース。

参照:

13

接続はインターフェースです。すべてのモックフレームワークはそれをモックすることができます: EasyMockMockito 、.。

それをモックすることは、他のJavaインターフェースをモックすることと同じです。

3
JB Nizet

私はモック接続を作成しません-私の意見では、それは何も証明しません。

ライブ接続で完全にテストした後、リポジトリ/ DAO自体をモックする理由がわかります。すでにテスト済みであるため、モックリポジトリ/ DAOをサービスまたは他のクライアントに提供します。統合テストを実行するまで、モックリポジトリ/ DAOが機能することを証明する必要はありません。

3
duffymo

上記の回答に記載されているようなモックフレームワークを使用できます(私は個人的にEasyMockを使用しています)[〜#〜]または[〜#〜]独自のモックオブジェクトを作成します。

class FakeConnection extends Connection{
       // Overrive all method behavious you want to fake.
}
3
GETah

easymockを試すことができます。使いやすいと思います。参考のためにチュートリアルを見つけることができます。 easymock

1
erimerturk

多くのテストケースでそのモックを再利用する場合は、接続の独自の実装を実装し、その実装をどこでも再利用することを検討することもできます。

1

私のAcolyteフレームワークはそのような目的に役立ちます-> https://github.com/cchantep/acolyte

このライブラリを使用すると、ハンドラーを提供する接続インスタンスを作成できます。ハンドラーを実装すると、クエリまたは更新を「ディスパッチ」することができます。結果セットを生成するか、カウント(または警告)を更新します。

1
cchantep