2016-09-16 63 views
0

StrutsとプレーンなJDBCフレームワークを使用して実装されている製品を引き継ぎます。私はテストをスピードアップするためにプロジェクトにJunitテストを実装する予定です。 FYI、このプロジェクトはまだ生産されていません。これはまだ開発段階ですが、非常に古い技術を使用しています。プロジェクトには、インタフェースとそれぞれの実装がありません。ような古いプログラミングは、クラスは直接インスタンス化され、そのように使用されます。だから、mockitoフレームワークを使用することはできません。これらすべての制限を受けて、私はプロジェクトにTDDを開発する必要があります。私は新しい技術でそれを完全に廃止して開発することはできません。Daoクラスを呼び出すビジネスクラスをテストするJunitテスト

私の質問は、ビジネスメソッドが機能しているかどうかを確認するjunitテストを書いています。このビジネスクラスもDAOを呼び出しています。テスト時にDB接続が作成されていないため、接続エラーが発生します。ビジネス層のみをテストするjunitテストを作成するにはどうすればよいですか?テストメソッドにDAO接続を含める必要がありますか?はいの場合、これをどのように達成するのですか?

私はJunitとTDDの初心者です。私の理解が間違っている場合や、これを修正する場合は、私を案内してください。

+0

答えは上質で、補完したいだけです。テスト中にこれらの現代のインメモリデータベースに接続できるかどうかを調べることができます。私が理解しているように、彼らは単体テストのために優れており、データベース接続を切り離す必要がありません。 –

答えて

0

私は何か他のことを行う前に、テスト可能な状態にリファクタリングすることをお勧めします。あなたが言ったようにデザインが本当に壊れている場合は、特定のクラスのための便利なテストを書く方法があります。

1

コードをリファクタリングできますか?もしそうなら、コードをリファクタリングして、実際のDAO用のDAOインターフェイスを定義し、新しく作成されたインターフェイスの模擬バージョンを実装し、ユニットテストでサービスに注入することができます。

フレームワークなしでDAOをサービスクラスに挿入する最も簡単な方法は、コンストラクタインジェクション、つまりDAOインスタンスをサービスクラスコンストラクタに渡すことです。

public class YourService { 
    private final YourDAOInterface dao; 

    public YourService(YourDAOInterface dao) { 
     this.dao = dao; 
    } 
} 

ここでコンストラクタdaoのパラメータは(あなたがそれらの2 DAOは、同じインターフェイスYourDAOInterfaceを実装するために必要な)テストのための本当のDAO、またはモック実装することができます。

0

私が推測するように、あなたの記事の最初の段落は、最終的に第2段落で尋ねた質問とは関係ありません。

私たちはユニットテストをユニットテストと呼んでいます。なぜなら、ユニットテストは統合テストではないからです。ここでレイヤーを混在させません。

ビジネスレイヤのみをテストすることを目標とする場合は、ビジネスレイヤのみをテストし、下のすべてを模倣します(DAOなど)。したがって、いくつかの模擬フレームワーク(Mockito、PowerMock、JMockitなど)を使用してビジネスレイヤーコードにデータを提供し、DAOレイヤーが正しいと仮定します。

mockingフレームワークを使用することにより、DAOレイヤがデータベースからハンドオーバーする予定のビジネス関数に同じデータを提供し、DAOレイヤをまったく実行しません。ユニットテストを適切に記述するために、JUnitに加えてこれらの模擬APIが必要になります。

In Memoryデータベースとフレームワーク(Apache DBUnitとH2 DBはあります)を使用することについてのご意見はお答えしますが、DAOレイヤーの単体テストを記述する際には必要です。

他の回答で示唆されているように、リファクタリングとコードをテスト可能にすることが常に推奨されます。

希望すると助かります!

+0

はい、私は、DAOオブジェクトを模擬するために模擬フレームワークを使用する必要があることを理解しています。現在のデザインはインターフェイスと実装を持たないため、モッキングを使用できるようにデザインを変更する必要があります。 DAOクラスの嘲笑を見つけることができるリンクを参照してください。 – Anand

+0

サービスレイヤーとDAOレイヤーコードのサンプルを表示する必要があります。あなたのDAOオブジェクトがサービス層の依存関係である場合、最初にそのDAO依存の擬似オブジェクトを作成し、その擬似オブジェクトを使用してサービス層が使用するテストデータを返します。実際の構文はAPIによって異なります。どのモックAPIを使うのか決めましたか? –

関連する問題