私はtxtファイルから読み込み、そのファイルに存在する単語でリストを作成する方法を得ました。 このメソッドは、計算され、Most Repeated Wordを返します。 そのためにjUnitを作成したいのですが。ファイルが頻繁に変更されているという事実を考慮して、そのメソッドの重要性をどのようにテストするべきですか?jUnit for file reader
答えて
@jaibalajiが書いているように、JuintTestsはJVMメモリ外のリソースに依存すべきではありません。
最初の手順は、のコードを実際のファイルとは独立してテスト対象(切り取り)にすることです。
私はtxtファイルから読み込み、ファイルに存在する単語でリストを作成します。メソッドは計算し、最も反復された単語を返します。あなたは3人の責任に言及。この文章で
:リスト
- をするようにしますあなたは、このメソッドを分割する必要があり、ほとんどの反復のWord に
を見つけます小規模なクラスで1つの責任しか持たずに編集してください。
class TextAnalyser { プライベート最終WordListBulder wordListBulder; //文字列を単語のリストに変換する プライベートfinal WordCountAnalyser wordCountAnalyser; public TextAnalyser(wordListBulder wordListBulder、wordCountAnalyser wordCountAnalyser){ this.wordListBulder = wordListBulder; this.wordCountAnalyser = wordCountAnalyser; }
public String findMostRepeatedWordIn(MyFileReader myFileReader){
String fileContent = myFileReader.readContent();
List<String> wordList = wordListBulder.crerateWordListFrom(fileContent);
return wordCountAnalyser.findMostRepeatedWordIn(wordList);
}
このコードはを失敗するとUnitTestedする必要はありません単純すぎます。 モジュールおよび/またはアクセプタンステストは、これが機能することを示します。
テストする動作は、クラスWordCountAnalyser
です。そして、それは決定的なテスト可能な出力につながる簡単な "偽の"入力を持っています。
ファイルは、メソッドのパラメータまたはこのメソッドのクラスのインスタンスフィールドである必要があります。
このようにして、データをマスターし、どのようにアサートするかを知っているファイルを提供することで、メソッドを単体テストできます。例えば
パラメータの方法で:
@Test
public void findMostRepeatedWork(){
// fixture
File myTestFile = ...;
// action
new MyClassToTest.findMostRepeatedWork(myTestFile);
// assertion
...
}
さらに進んでください: 'BufferedReader'または' InputStream'はクラス*依存関係*を作成して、そのインタフェースのモック**を作成し、ファイルシステムに触れる必要はありません。 –
私はmostRepeatedWordを返すメソッドを記述しました。どのように私は最初の場所でそれを書いたことを知っていますか? –
@MaorShitrit実際のコード(TDD)の前に*予想される動作ごとにUnitTestを書かない限り、 –
JUnitのは、リソースを取っているすべてのテスト(ファイル、dB以上のためのものではありません:あなたはそれが簡単にユニットができ
public String findMostRepeatedWork(File file){
...
}
そしてそうネットワーク)
ほとんどの繰り返し単語の出現回数を知ることができますが、そうでないとできない場合は、ファイルを変更すると難しくなります。^^ – azro