2012-06-13 49 views
3

我有一個打印類的私有變量的方法。如何用xUnit.net做單元測試控制檯輸出?

public class Test 
{ 
    private int number; 

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

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

如何創建一個單元測試以確保它在控制檯上打印出我期望的值?

回答

7

使控制檯輸出依賴。由於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"); 
相關問題