2016-04-28 6 views
1

私は現在Luceneの索引付けを手に入れていますし、TDDを使用している場合は「正しい」アプローチについて頭を悩ましています。あなたが持っているこのインデックスでクエリを検索するにはなど、TDD - この種の依存シーケンス状況のアプローチは何ですか?

を、あなたはIndexWriterを作成する必要があり、これを行うトークン化されているテキストのシンプルなコレクション(文字列)、に基づいてインデックスを生成し、茎のために

私の最初のテストクラス(JUnit 4)を作成する過程で、私はこれらの各ステップを1つずつ行い、新しいテストメソッドを作成しました。このプロセスの各ステップは、すべてがうまくいけば最終的にヒット数がゼロにならないようにします。

最後のテストメソッドは、これらのすべての手順を実行することです:インデックスディレクトリをクリアし、IndexWriterを作成し、インデックスなどを作成し、最後にヒットをカウントします。この最後の方法は最終的に道に沿って何か間違ってしまうことによって踏み外される可能性があります。さらに、以前の方法はすべて冗長に見える...!そして、 "嘲笑"の機会は、自分自身を示すようです...

これは "テストスイート"の候補ですか? TDD Proはこのような状況に対して「適切な」テストをどのように開発していますか?

答えて

1

あなたが参照する最後のテスト方法は単体テストよりも統合テストのほうが多いと思います。単体テストは、非常に特定のコード単位(通常はメソッドまたはメソッドの一部)をテストするだけで、他のクラスとのやりとりを模倣し、データベース、ファイルシステム、または特定のコード単位テスト。あなたが作成した最初のテストはユニットテストであり、最後のテストは統合テストです。単体テストでは非常に特定のロジックをテストし、統合テストではそれらの間の相互作用をテストしているので、2種類のテストの間にいくつかの冗長性を持たせても構いません。

+0

ありがとうございました...実際には、この最終テストの前にテストして、複数のことを行う必要があります:インデックスを作成し、クエリのインデックスを開くことができるかどうかをテストします...言い換えれば、 :最初のテスト方法は1ステップ、2ステップは2ステップ、3ステップは3ステップ、4ステップは4です。これらのテストの前提条件のいずれかを「模擬」する方法はないため、重複して重複する必要があります。さらに、ファイルシステムに触れない方法はありません...そうです、これらは統合テストのようです...新生児として私はちょうどプロがどのようにこの状況を処理するのだろうかと思っています。 –

+0

外部のやりとりを模倣する方法がないと私は驚くでしょう。それは通常可能性があり、必ずしも実現可能ではない。努力から得られる価値を常に測定しなければならないので、この場合は統合テストを書くだけです。私はあなたのテストがお互いに依存しているかどうかあなたの説明から疑問に思っています。これは正当な理由があるかもしれませんが、エラーを特定するのが難しくなるため、一般的に悪い習慣です。また、あなたのバージョンのjunitが実行順序を保証できることを確認する必要があります。 – TheEllis

+0

もう一度おねがいします...はい、私は現在@FixMethodOrder(MethodSorters.NAME_ASCENDING)を試しています。 –

関連する問題