当一个C#函数必须写到stdout时,我如何对该函数进行单元测试?

问题描述 投票:0回答:1

我有一个函数,它的规范要求它写到stdout。 当我测试时,stdout是MIA,我找不到它。 我需要抓住它,这样我就可以断言预期的响应。 该方法将被命令管道调用。

此外,我将编写一些管道函数:==stdin==> 方法 ==stdout==>。 也就是说我的单元测试需要将测试数据推送到stdin中。

我在写方法之前规划了测试方案,却没有找到很多最新的信息。 我希望MSTest可能有一些帮助方法。 如果没有,我需要一些关于如何编写自己的方法的指导。

c# stdout visual-studio-2019 stdin mstest
1个回答
4
投票

我建议通过一个 TextReader 和a TextWriter,也许是可选的参数。然后你可以从读取器读取,并向写入器写入。然后调用者通过 Console.OutConsole.In,或者你可以在方法中进行。

public void Foo(TextReader reader = null, TextWriter writer = null)
{
    reader = reader ?? Console.In;
    writer = writer ?? Console.Out;
    // Read and write
}

(或者使用一个无参数的重载来调用一个有两个必要参数的重载)

在你的单元测试中,使用 StringReader 和a StringWriter.

如果你能 所需 调用者传递读取器和写入器,这将使你避免将你的代码与控制台紧密耦合,从而使代码更加干净--我可以想象一系列方法都接受读取器和写入器(或者使用字段),这样只有最顶层的代码才 "知道 "它在与控制台打交道。

© www.soinside.com 2019 - 2024. All rights reserved.