2012-03-30 53 views
4

JUnit 4.9を使ってHibernate 4.1で実装されたクラスMyTypeDAOをテストしたいと思います。私は次の質問があります:DAOテスト:正しい方法ですか?

私のDAOでは、自分のIDで自分のタイプのインスタンスを取得するfindByIdメソッドがあります。この方法をテストするには?

  1. を、私は私のタイプのインスタンスを作成します。私がやった何

  2. 次に、このインスタンスを保持する必要がありますが、どうすればよいですか。私はsaveMyTypeメソッドに頼ることができますか?私はテストケースに入っているので、この方法はテストされていないので、そうは思わない。
  3. その後、私は最後に、私はステップ1で作成したインスタンスは、私はステップ3
に入る1に等しいことを確認し、ステップ1
  • で作成されたインスタンスのIDとfindByIdメソッドを呼び出す必要があります

    ご存じですか?ベストプラクティスは何ですか?

    私はsaveメソッドに対して同じ質問をしています。実行した後、saveインスタンスを取得する必要があるからです。ここでも、私はfindByIdメソッドがまだテストされていないので、私はfindByIdメソッドに頼ることはできないと思います。

    おかげ

  • 答えて

    4

    1つの可能な方法は次のとおりです。

    は、テストのためにメモリ内のDBを作成し、事前に定義されたSQLスクリプトから、このDBの負荷内容andthenこのデータベースに対するあなたのDAOクラスをテストします。

    テストを開始するたびに、SQLスクリプトを使用してデータベースが最初から作成されます。結果を返すIDと結果を返さないIDがわかります。 (聡さんのコメントから)

    See [DbUnit][1]

    +1

    +1 ...また、DbUnitはこのタスクをかなり簡略化して見ています。 – satoshi

    +1

    もう1つはdbUnitです。あなたはそれを使用する場合は、XMLにエクスポート機能を使用してください。こうすることで、すべてのテーブルを編集してからxmlを作成することができます。多くの時間を節約できます。 –

    1

    私はあなたがこれを達成するために多くの選択肢を持っていないと思います。認容テスト(2つのことをテストするか、依存するテスト)を行うのは良い習慣ではありません。それにもかかわらず、あなたは本当にこの例外を有効かつ速く考えるべきです。あなたは正しいです:オブジェクトを永続化して取得することは、このDAOレイヤーをテストすることをお勧めします。

    その他のオプションには、データベース内のレコードを確認し、検索(findById)をテストすることが含まれます。オブジェクトを永続させ、それをティアダウンメソッドから削除する2番目のテスト。

    実際、読み込みと保存をテストする方が簡単ですし、それは意味があります。

    +0

    私は直交テストを強制されていないようです。たとえば、DBUnitはデータベースからデータを取得する可能性を提供するので、DBUnitコードがテストされ、DBUnitで取得したものが実際にデータベースに存在するデータであると仮定できます。どう思いますか? –

    関連する問題