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.Outproperty,因此您只需要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 回答