c# – Mocking’System.Console’行为

前端之家收集整理的这篇文章主要介绍了c# – Mocking’System.Console’行为前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有一个标准的方式来制作一个C#控制台应用程序单元可以通过编程针对接口,而不是System.Console?

例如,使用IConsole接口?

你有没有这样做,你使用了什么样的方法

您是否在应用程序需要写入标准输出时公开事件?

解决方法

我认为你的方法与界面将工作,我不认为我会利用事件.假设应用程序不接受除命令行参数之外的用户输入,我可能会使用这样的东西来包装Console.Write / Console.WriteLine:
public interface IConsoleWriter
{
    void Write(string format,params object[] args);
    void WriteLine(string format,params object[] args);
}

要测试,我将创建一个TestConsoleWriter,将所有的写入存储到一个缓冲区中,然后我可以断言,或者我将创建一个模拟,并验证Write或WriteLine是否与我预期的参数一起调用.如果你的应用程序要做大量的写入控制台(比如100 MB左右的输出),那么使用模拟可能会因为性能原因而更为可取,否则我会选择你认为更容易的方法跟…共事.

然而,这种方法有一些限制.如果您正在使用无法修改的任何程序集,并且他们写入控制台,那么您将看不到该输出,因为您无法强制这些类使用您的IConsoleWriter.另一个问题是Write和WriteLine方法有18个左右的重载,所以你可能会包装很多方法.为了解决这些限制,您可能只想使用Console.SetOut方法在测试时将控制台输出重定向到您自己的TextWriter.

就我个人而言,我想采用SetOut方法.在单元测试开始时(或者可能在SetUp方法中)只需要添加一行,并且您可以断言TextWriter中写入的内容.

猜你在找的C#相关文章