我有一个函数,它的规范要求它写到stdout。 当我测试时,stdout是MIA,我找不到它。 我需要抓住它,这样我就可以断言预期的响应。 该方法将被命令管道调用。
此外,我将编写一些管道函数:==stdin==> 方法 ==stdout==>。 也就是说我的单元测试需要将测试数据推送到stdin中。
我在写方法之前规划了测试方案,却没有找到很多最新的信息。 我希望MSTest可能有一些帮助方法。 如果没有,我需要一些关于如何编写自己的方法的指导。
我建议通过一个 TextReader
和a TextWriter
,也许是可选的参数。然后你可以从读取器读取,并向写入器写入。然后调用者通过 Console.Out
和 Console.In
,或者你可以在方法中进行。
public void Foo(TextReader reader = null, TextWriter writer = null)
{
reader = reader ?? Console.In;
writer = writer ?? Console.Out;
// Read and write
}
(或者使用一个无参数的重载来调用一个有两个必要参数的重载)
在你的单元测试中,使用 StringReader
和a StringWriter
.
如果你能 所需 调用者传递读取器和写入器,这将使你避免将你的代码与控制台紧密耦合,从而使代码更加干净--我可以想象一系列方法都接受读取器和写入器(或者使用字段),这样只有最顶层的代码才 "知道 "它在与控制台打交道。