2017-08-08 7 views
0

私はtxtファイルから読み込み、そのファイルに存在する単語でリストを作成する方法を得ました。 このメソッドは、計算され、Most Repeated Wordを返します。 そのためにjUnitを作成したいのですが。ファイルが頻繁に変更されているという事実を考慮して、そのメソッドの重要性をどのようにテストするべきですか?jUnit for file reader

+0

ほとんどの繰り返し単語の出現回数を知ることができますが、そうでないとできない場合は、ファイルを変更すると難しくなります。^^ – azro

答えて

0

@jaibalajiが書いているように、JuintTestsはJVMメモリ外のリソースに依存すべきではありません。

最初の手順は、のコードを実際のファイルとは独立してテスト対象(切り取り)にすることです。

私はtxtファイルから読み込み、ファイルに存在する単語でリストを作成します。メソッドは計算し、最も反復された単語を返します。あなたは3人の責任に言及。この文章で

:リスト

  • を取り込むファイル
  • を読ん

    1. をするようにしますあなたは、このメソッドを分割する必要があり、ほとんどの反復の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です。そして、それは決定的なテスト可能な出力につながる簡単な "偽の"入力を持っています。

  • 0

    ファイルは、メソッドのパラメータまたはこのメソッドのクラスのインスタンスフィールドである必要があります。
    このようにして、データをマスターし、どのようにアサートするかを知っているファイルを提供することで、メソッドを単体テストできます。例えば

    パラメータの方法で:

    @Test 
    public void findMostRepeatedWork(){ 
        // fixture 
        File myTestFile = ...; 
        // action 
        new MyClassToTest.findMostRepeatedWork(myTestFile); 
        // assertion 
        ... 
    } 
    
    +0

    さらに進んでください: 'BufferedReader'ま​​たは' InputStream'はクラス*依存関係*を作成して、そのインタフェースのモック**を作成し、ファイルシステムに触れる必要はありません。 –

    +0

    私はmostRepeatedWordを返すメソッドを記述しました。どのように私は最初の場所でそれを書いたことを知っていますか? –

    +0

    @MaorShitrit実際のコード(TDD)の前に*予想される動作ごとにUnitTestを書かない限り、 –

    0

    JUnitのは、リソースを取っているすべてのテスト(ファイル、dB以上のためのものではありません:あなたはそれが簡単にユニットができ

    public String findMostRepeatedWork(File file){ 
        ...  
    } 
    

    そしてそうネットワーク)