5

クラスのプライベート変数を出力するメソッドがあります。

public class Test
{
    private int number;

    public Test(int number)
    {
        this.number = number;
    }

    public void PrintValue()
    {
        Console.WriteLine("Number: " + number);
    }
}

ユニットテストを作成して、コンソールで期待した値が出力されることを確認するにはどうすればよいですか?

4

2 に答える 2

12

コンソール出力を依存関係にします。Console.WriteLine出力をConsole.Outプロパティにリダイレクトするので、必要なのはTextWriterインスタンスだけです。

public Test(TextWriter outputWriter, int number)
{
    this.outputWriter = outputWriter;
    this.number = number;
}

public void PrintValue()
{
    outputWriter.WriteLine("Number: " + number);
}

実際のアプリケーションでは、それを渡してConsole.Outシステムコンソールに印刷します。テストでは、単純に偽のライターを使用します(たとえばStringWriterに基づいてStringBuilder):

const int NumberToPrint = 5;
var content = new StringBuilder();
var writer = new StringWriter(content);
var sut = new Test(writer, NumberToPrint);

sut.PrintNumber();

var actualOutput = content.ToString();
Assert.AreEqual(actualOutput, "Number: 5");
于 2012-06-13T17:03:33.493 に答える
0

Console.SetOutを使用して、コンソール出力をリダイレクトし、やりたいことを正確に実行できます。

 var output = new StringWriter();
 Console.SetOut(output);

 do_something_that_writes_to_console();
 var outputString = output.ToString();
 //check for whatever you need here.
于 2021-05-28T14:59:37.023 に答える