C#에서 NUnit을 사용하여 유닛 테스트를하고 있는데, 주 프로그램이 명령 행 인수에 따라 실제로 올바른 결과를 출력하는지 테스트하고 싶습니다.단위 테스트 내에서 Console.Out으로 보낸 출력을 가져 오는 중입니까?
NUnit 테스트 메서드에서 Program.Main(...)
을 호출하여 Console.Out 및 Console.Error에 기록 된 모든 것을 가져 와서 확인할 수 있습니까?
C#에서 NUnit을 사용하여 유닛 테스트를하고 있는데, 주 프로그램이 명령 행 인수에 따라 실제로 올바른 결과를 출력하는지 테스트하고 싶습니다.단위 테스트 내에서 Console.Out으로 보낸 출력을 가져 오는 중입니까?
NUnit 테스트 메서드에서 Program.Main(...)
을 호출하여 Console.Out 및 Console.Error에 기록 된 모든 것을 가져 와서 확인할 수 있습니까?
당신은 자세한 내용에 대한 this blog post를 참조하십시오이
[TestMethod]
public void ValidateConsoleOutput()
{
using (StringWriter sw = new StringWriter())
{
Console.SetOut(sw);
ConsoleUser cu = new ConsoleUser();
cu.DoWork();
string expected = string.Format("Ploeh{0}", Environment.NewLine);
Assert.AreEqual<string>(expected, sw.ToString());
}
}
처럼, 사용자 정의 StringWriters에 콘솔에서 출력 및 오류를 리디렉션 할 수 있습니다.
매력처럼 일했습니다. 고마워요! –
Resharper를 사용하는 경우 다음 테스트를 수행 할 때마다 출력 화면이 사라집니다. ( –
@EgorPavlikhin : Console.SetOut (new StreamWriter (Console.OpenStandardError())를 사용하여 각 테스트가 끝날 때 stdout을 재설정해야합니다. '(Autoflush를 true로 설정해야 할 수도 있습니다.) 그 후에 R #을 포함하여 테스트 러너와 함께 작동합니다. – Abel
당신은 사용하여 문을 출력 얻을이 간단한 클래스를 사용할 수 있습니다 :
using (var consoleOutput = new ConsoleOutput())
{
target.WriteToConsole(text);
Assert.AreEqual(text, consoleOutput.GetOuput());
}
더 자세한 정보와를 찾을 수 있습니다 여기에
public class ConsoleOutput : IDisposable
{
private StringWriter stringWriter;
private TextWriter originalOutput;
public ConsoleOutput()
{
stringWriter = new StringWriter();
originalOutput = Console.Out;
Console.SetOut(stringWriter);
}
public string GetOuput()
{
return stringWriter.ToString();
}
public void Dispose()
{
Console.SetOut(originalOutput);
stringWriter.Dispose();
}
}
것은 그것을 사용하는 방법을 예입니다 내 블로그 게시물의 작업 코드 샘플 - Getting console output within a unit test.
당신은 자기 홍보 FAQ를 읽지 않았습니다. 귀하가 게시 한 모든 답변은 귀하의 블로그에 대한 링크였습니다. –
이것은 통합 테스트이며 단위 테스트가 아닙니다. –
동의합니다. 솔루션 레이아웃을 수정하여 지금 반영하고 있습니다. –
회색 영역에 있지만 실제로 프로그램 파일에서 코드를 호출하는 외부 프로그램을 호출하지는 않지만 여전히 단위 테스트보다 통합 테스트 같다고 생각합니다. –