Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用xUnit.net进行单元测试控制台输出?_C#_Unit Testing_Console_Xunit.net - Fatal编程技术网

C# 如何使用xUnit.net进行单元测试控制台输出?

C# 如何使用xUnit.net进行单元测试控制台输出?,c#,unit-testing,console,xunit.net,C#,Unit Testing,Console,Xunit.net,我有一个打印类的私有变量的方法 public class Test { private int number; public Test(int number) { this.number = number; } public void PrintValue() { Console.WriteLine("Number: " + number); } } 如何创建单元测试以确保它在控制台上打印出我期望的值?

我有一个打印类的私有变量的方法

public class Test
{
    private int number;

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

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

如何创建单元测试以确保它在控制台上打印出我期望的值?

使控制台输出成为依赖项。由于
Console.WriteLine
将其输出重定向到,因此您只需要
TextWriter
实例:

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

public void PrintValue()
{
    outputWriter.WriteLine("Number: " + number);
}
在实际的应用程序中,您将它传递给Console.Out以打印到系统控制台。在测试中,您只需使用伪编写器(例如基于
StringBuilder
)的
StringWriter
):

您可以使用重定向控制台输出并完全执行您想要执行的操作

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

 do_something_that_writes_to_console();
 var outputString = output.ToString();
 //check for whatever you need here.
 var output = new StringWriter();
 Console.SetOut(output);

 do_something_that_writes_to_console();
 var outputString = output.ToString();
 //check for whatever you need here.