で構成されていDAOは方法の例はありますか?モックセッションで合格?ユニット/統合テストここでは、一般的な方法
答えて
単体テストで行うことができるのは、セッションと基準を模擬して期待値を設定することです.JMockを使用していくつかのケースでこれを行い、Restricitons用のHamcrestマッチャーを書く必要がありました。盲目的にテストカバレッジを増やす以外に、その中に大きな価値があると私は確信していません。一方
- 明確な使用であろう、ここで統合テストを書くには、いくつかのデータをメモリ内にデータベースを設定し、私はあなたが管理していると仮定した方法は、あなたの質問では、正しいオブジェクト取得のための統合テスト()のための例:あなたは春のフレームワークを使用する場合は、春のコンテキストとクラスのランナーを使用してDIを使用するために、スプリングテストモジュールを使用することができます
// if you can inject the object:
// @Inject
// public MyTestDAO<MyType> dao;
//
@Test
public testGet() throws Exception {
Session session = HibernateUtils.getSessionFactory().getCurrentSession();
MyTestDAO<MyType> dao = new MyTestDAO<MyType>();
// if you use DI facility, check against null
// assertNotNull(dao)
MyType myType = dao.get(Test.class, 1L);
assertNotNull(myType);
assertEqual(myType, equalObj);
// more asserts?
}
:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring.xml"})
を返すことを主張しますあなた自身のセッション。私はユニットテストの部分について話します。インテグレーションテストは、インテグレーション中にインメモリデータベースで実行できます。 H2またはDerbyは、私が知る限り、最も使用されているものの1つです。
あなたはDAOにモックセッションを渡すことができますが、同僚の一人が単体テストを書き、モックセッションに合格しなかった場合はどうなりますか?あなたはデータベースにヒットしますか?データベースをヒットしたくない場合は、この方法が問題になる可能性があります。
抽象的な工場パターンを使用してDAOをACQUIREする方がよいでしょう。あなたは、このように最初にあなたのダオを定義する場合
:
MyDao.get(someId);
しかし、あなたは次のように行くことができます:基本的に、あなたのコードは次のように現在
public interface IDao <SomeGenerics> {
public <T> T get(Class<T> type, ID key);
//more generic methods
}
次に、あなたが持つことができますDaoの実装は次のようになります。
public class MyDao <SomeGenerics> implements IDao<SomeGenerics> {
public <T> T get(Class<T> type, ID key){
//some real session stuff
}
//...more real session stuff
}
ユニットテストでは、ちょっとこのようなあなたのIDaoインターフェイスのモック、:
public class MyDaoMock <SomeGenerics> implements IDao<SomeGenerics> {
//this thingy can hold a small array of mock instances
private ArrayList<T> mockInstances;
public <T> T get(Class<T> type, ID key){
//some fake stuff, kinda like this;
for (T mockInstance : mockInstances) {
if (mockInstance.getId().equals(key)) {//here i assume your T has a method getId, you figure out the kinks
return mockInstance;
}
}
//if not found, emulate your persistence's behavior, return null, throw an exception or do whatever
return null;
}
//...more fake stuff
}
今、あなたはインターフェイスと2つの実装、本番コード用とあなたのユニットテストのための1つを持っています。これで、生産現場やコードをテストする際に、適切なDAOを提供するためのファクトリパターンを実装するだけです。
- 1. ユニットと統合テスト
- 2. 、ここでは一般的な関係
- 3. 一般的なOAuthクライアントの統合
- 4. 一般的な配送方法の統合
- 5. 一般的な方法でこのキャストは安全ですか?
- 6. Javascriptを:ここでは、一般的に
- 7. のIQueryableユニットまたは統合テスト
- 8. ユニットと統合テストをソナーコードカバレッジに含める方法
- 9. この複雑な一般的なMakefileルールの構成方法
- 10. Couchbaseによるユニット&統合テスト
- 11. JavaScriptクライアント側でアプリケーションをテストする一般的な方法
- 12. 一般的な方法と
- 13. 静的な一般的な方法
- 14. は、私はここで、一般的なコンバータ</p> <p>を作成しています一般的な方法で
- 15. これより一般的なparfoldr
- 16. 復元されたテンソルフローモデルをテストする一般的な方法
- 17. ユニット/統合テスト中にスプリング階層を管理する方法は?
- 18. ASP.NET Core 1 MVC 6のユニット/統合テスト用にIFormFileをモックする方法は?
- 19. ZF2ユニット/アプリケーションモジュールのテストを1回のコールに統合する方法は?
- 20. ServiceStackでユニット/統合テストを書くには
- 21. 一般的なIComparerをテストする
- 22. ユニットテスト(Android) - テストする一般的なシナリオ
- 23. 一般的に、ハイバネーションでデータベース接続をテストする方法
- 24. はここで統合
- 25. は、これは非常に一般的な要件です
- 26. 大きなVisual Studioソリューションのユニット/統合テスト組織
- 27. この変換を行う一般的な方法はありますか?
- 28. 私は、これらのクラスを持っている一般的な方法
- 29. 方法で、一般的なパラメータで定義される一般的な復帰方法
- 30. 春の統合テスト - 豆をオーバーライドする慣習的な方法
セッションを嘲笑するのではなく、私たちはdao自体を模倣し、小さなモック配列で単純なif/else操作で基準の制限をエミュレートしますか?確かに、それは適切なモックを書くために開発者にいくつかのストレスをかけるが、私はそこにいくつかの利点を見ることができます。しかし、他の人がどのようにそれをやっているか見ることは、いつも素晴らしいことです。 –