DBUnitは、私の知る限り、結果セットを提示しませんが、メモリ・データベースを作成するのに役立ちます。
私は、この時点では、模擬フレームワークが間違ったアプローチであると言います。 Mockingは、単にデータを返すだけでなく、行動やインタラクションをテストすることで、あなたのやり方になる可能性があります。
代わりに結果セットインターフェイスを実装するか、結果セット全体を実装することなく気になるメソッドを実装するクラスへの結果セットインターフェイスの動的プロキシを作成します。テスト中のデータセットが一貫していればメモリ内のデータベースを維持するのと同じくらい簡単にクラスを維持することができますし、おそらくデバッグは簡単です。
dbunitで結果セットのスナップショットをとり、dbunitでテスト中にxmlから読み込み、ダミーの結果セットでdbunitのクラスからデータを読み込ませることで、そのクラスをバックアップできます。データが軽度に複雑な場合は、これは合理的なアプローチになります。
クラスが結合されていて、同じテストの一部として変更されたデータを読み込む必要がある場合、私はメモリデータベースを探します。それでも、私は、あなたがその依存関係を引き離すまで、実際のデータベースのコピーを使うことを検討します。
簡単なプロキシの生成方法:http://mockrunner.sourceforge.net/:
private static class SimpleInvocationHandler implements InvocationHandler {
private Object invokee;
public SimpleInvocationHandler(Object invokee) {
this.invokee = invokee;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
method = invokee.getClass().getMethod(method.getName(), method.getParameterTypes());
if (!method.isAccessible()) {
method.setAccessible(true);
}
try {
return method.invoke(invokee, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
}
}
}
public static <T> T generateProxy(Object realObject, Class... interfaces) {
return (T) Proxy.newProxyInstance(realObject.getClass().getClassLoader(), interfaces, new SimpleInvocationHandler(realObject));
}
こんにちはYishai、フィードバックありがとうございます。私は10以上のテストのそれぞれについて約100のレコードを嘲笑し、レコードは10フィールドで構成されます。これは、AFAIUは、ファイルとカスタムResultSetの実装でデータを格納するDBUnitで私を残します。返信をしてくれてありがとう。 – DiaWorD
あなたは大歓迎です。私は、10のテストのそれぞれが異なるデータを必要とするならば、これは合理的なアプローチであると言います。 DBUnitを使用すると、ResultSetをXMLに書き込むことができるため、テストで参照するだけです。 – Yishai