我有一个打印类的私有变量的方法。
public class Test
{
private int number;
public Test(int number)
{
this.number = number;
}
public void PrintValue()
{
Console.WriteLine("Number: " + number);
}
}
如何创建单元测试以确保它在控制台上打印我期望的值?
答案 0 :(得分:10)
使控制台输出成为依赖项。由于Console.WriteLine
会将其输出重定向到Console.Out
property,因此您需要的只是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");
答案 1 :(得分: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.