2016-11-21 7 views
0

私は自分のコードを単体テストする際に、いくつかのtddを試してみることを含め、より良いものにしようとしています。私が持っている1つの質問は、CSVファイルを解析するオブジェクトをテストする方法です。ユニットテスト - スタブする方法/方法

class EventLog { 
    parse() { 
     // load csv file, create array of Events 
    } 

    getEvents(options) { 
     // depending on options, return correct set of events 
    } 
} 

class Event {} 

だから最初、私は別のオプションが正しい結果を出すことを確認します私のgetEventsメソッドのテストを書きたい...私は小さな例を挙げてみましょう。この場合、私はEventsのセットを渡すことができるパース用のスタブを作成し、そのデータセットに対してテストを実行しますか?

第2に、解析メソッドをテストする必要があります。ファイルが存在しないとき、フォーマットが期待どおりに一致しないなどの簡単なことをテストする計画を立ててください。Eventsなどが作成されます。これは私が必要とするケースをカバーするいくつかのサンプルファイル.csvを保存するだけですか?あるいは、loadCsv()メソッドを抜き出して、より効果的にスタブするのでしょうか?

答えて

1

クラスの使用はどのくらい難しいですか?

文字列を受け取るパーサのように簡単な場合は、直接使用することもできます。 ES6クラスでは、新しいclass TestEventLog extends EventLogを宣言し、継承を最小スタブとして使用することさえできます。それは最小のオーバーヘッドを持ち、私の好きな戦略です。

クラスが特に複雑な場合は、小規模な(単体の)テストでは、コードの一部に集中することを忘れないでください。あなたがテストしていないクラスから多数のメソッドが呼び出されているのを見ると、スタブ付きテストの臭いになります。この場合

、私はおそらく、継承と交換することにより開始する:

class TestEventLog extends EventLog { 
    parse() { 
    // ignore arguments, return known test data 
    return [['foo', 1], ['bar', 2]]; 
    } 
} 

基本理念は、できるだけコードを導入する必要があります。テストをサポートするために書くコードが多くなればなるほど、より多くのコードをテストする必要があります。

+0

sinonスタブメソッドを使用した場合と同様に継承を使用するメリットとデメリットは何ですか? –

+0

@TroyCosentinoは典型的にはごくわずかですが、私はそれを簡単にするために継承を好むだけです。 'extends'よりも多くのポイントを得ることはできません。クラスがより複雑な模倣を必要とする場合、または元々の動作を望まない場合は、スタブが便利です。 – ssube

+0

素晴らしい、情報ありがとう!間違いなく、私の頭を正しい精神に惹かすのに役立ちます –

関連する問題