【发布时间】:2015-03-25 22:43:32
【问题描述】:
这是 Grabbing the output sent to Console.Out from within a unit test? 和 referenced article 在 Mark Seemann 接受的答案中的跟进。
我想在测试时使用 Console.Out 和 Console.In 来重定向流。类中的每个测试都需要使用重定向。
为了保持测试干净,我想在测试 SetUp 和 TearDown 中执行此操作。
这就是我的想法:
private StringWriter _sw;
private StringReader _sr;
[SetUp]
public void SetUp()
{
_sw = new StringWriter();
Console.SetOut(_sw);
_sr = new StringReader("100");
Console.SetIn(_sr);
}
[TearDown]
public void TearDown()
{
var standardOut = new StreamWriter(Console.OpenStandardOutput());
standardOut.AutoFlush = true;
Console.SetOut(standardOut);
Console.SetIn(new StreamReader(Console.OpenStandardInput()));
}
然后我会在测试中使用“_sw.ToString()”来验证写入流的内容。
为此使用设置或拆卸方法有什么主要缺点吗?
这是否类似于使用using 语句进行重定向?
例如
using (StringWriter sw = new StringWriter())
{
...
}
【问题讨论】:
标签: c# unit-testing console nunit