9

いくつかのレコードを読み取り、データベースに挿入する簡単なアプリケーションを作成しています。挿入ロジックを処理するストアドプロシージャを作成しましたが、それを個別にテストする予定です。ここで、ビジネスオブジェクトを取得し、それをストアドプロシージャ呼び出しに渡すロジックの部分について、適切な単体テストを作成したいと思います。

私がやりたいのは、データベース接続のモックを渡し、期待されるパラメーター値を使用して呼び出しが行われることを表明することだと思います。

Connection dbConnection = makeMockConnection();  // how?
MyObjectWriter writer = new MyObjectWriter(dbConnection);
writer.write(someSampleObject);
// somehow assert that dbConnection called
// `sp_saveMyObject` with param values x, y, and z

ただし、多くの作業が内部を掘り下げjava.sql.Connection、それがどのように機能するかを理解してから、すべての結果をモックするようです。これをすべて行うテストライブラリはありますか?私はこれに間違った方法で来ていますか?

4

3 に答える 3

2

モックストアドプロシージャを使用して、インメモリHSSQLデータベースを作成できます。モックスプロックは、テーブルに行を挿入して、実行されたこととそのパラメーターが何であったかを示します。テスト対象のコードを実行してから、データベースを調べて何が起こったかを確認します。

于 2012-11-14T10:55:43.537 に答える
0

接続のモックには、Decoratorデザインパターンを使用できます。使用するドライバーを使用してDBへの実際の接続を作成します。このドライバーは、接続インターフェイスを実装し、実際の接続をメンバーとして保持するConnectionImplクラスによってラップされます。
実際に実行したくない実際の呼び出しはすべてモックコードに置き換え、滞在するすべての呼び出しは実際の接続オブジェクトの同じメソッドを呼び出します(呼び出しを委任します)。
このようにして、通常どおりコーディングします。返されたオブジェクトと、接続を作成するメソッドのみが異なります。
これで、モックオブジェクト(ConnectionImpl)に、たとえば入力をチェックする単体テストコードを追加できます。

于 2012-11-14T11:02:52.180 に答える
0

どのように機能するかを気にしないのであればMyObjectWriter、それだけで、統合テストを作成して単体テストを忘れる傾向があります。

ストアドプロシージャをどのようにテストしているかについては言及していませんので、ご容赦ください。ただしMyObjectWriter、データベースで実際のストアドプロシージャを呼び出し、後でデータベースの状態を確認するテストを作成します。可能であれば、インメモリデータベースを使用して、テスト期間を短縮します。

于 2012-11-14T12:29:24.723 に答える