2011-08-17 24 views
0

私はFakeItEasyを使ってMockingを開始しており、ある時点で立ち往生しています。私はインターフェイスの下forループを使った関数のテストスクリプト

public interface IPrint { 
    void Print(int start = 1, int end = 100); 
} 

public interface IConverter { 
    string Convert(int number); 
} 

の下に持って

のiPrintの実装です:私は、印刷方法のためにテストを書きたい

public class PrintNumbers : IPrint { 
    public IConverter Converter { get; set; } 
    public PrintNumbers(IConverter converter) { 
     this.Converter = converter; 
    } 
    public void Print(int start = 1, int end = 100) 
    { 
     for (int count = start; count <= end; count++) 
      Console.WriteLine("{0}", this.Converter.Convert(count));   
    }  
} 

、あなたはアドバイスanything.Iを喜ばせるだろうことを確認しますforループは、count = start(最初のパラメータ)で呼び出され、最後の最後のパラメータの末尾にある<の最後のcountをインクリメントする必要があります。

+1

何を試しましたか? Stack Overflowは、プログラミングに関する*特定の問題*を議論するためのウェブサイトです。 「無料コードサービス」ではありません。このような質問はしないでください。 –

答えて

1

私はあなたがテストしたいことがわかりません、converter.Convertは呼ばれていますか?それはなぜ重要なのですか?私にはそれはのように見えます。は、変換された各値とともにConsole.WriteLineが呼び出されたということです。これを行うにはいくつかのテクニックがあります.1つは、インターフェイスIOutputWriterにWriteLineメソッドを注入することです。このデフォルトの実装は、Console.WriteLineに委任します。テストでは、偽のinstaedを使用します。

もう1つの可能性は、標準出力(Console.Out)を選択したテキストライターにリダイレクトし、それに対して断言することです。この特定の問題を扱うRoy Osherove's TDD Kata 2をご覧ください。

ただし、特定の値で特定のメソッドが呼び出されたことをアサーションする場合がありますので、指定された例でそれを行うテストの例を挙げます(ただし、この特定のケースでテストするのに適切なもの)。

var converter = A.Fake<IConverter>(); 
var printer = new PrintNumbers(converter); 

printer.Print(1, 3); 

A.CallTo(() => converter.Convert(1)).MustHaveHappened(); 
A.CallTo(() => converter.Convert(2)).MustHaveHappened(); 
A.CallTo(() => converter.Convert(3)).MustHaveHappened(); 

私はこれはこれは、多くののうちのテストだろうので、しかし偉大な例であるか分かりません。

関連する問題