c# - 模拟测试中的标准输入

标签 c# unit-testing input

我有一个应用程序,可以像这样使用:

type file.txt|app.exe -i

即我的应用程序将从 file.txt 读取数据。

现在我想编写一些测试,以确保应用程序能够很好地处理 file.txt 中的一些特殊数据。

如何组织这个?

我的应用程序读取输入,例如

input = Console.In.ReadToEnd();

在不读取数据的简单测试中,我只是使用 App 类,例如:

using(App app = new App())
{
  result = app.Run(args)
}
if (result != 0)
Assert.Fail("Failed");

最佳答案

您可以将控制台输入替换为您自己的对象,例如 StringReader,并向其提供您想要的任何输入:

var oldIn = Console.In;
try
{
    Console.SetIn(new StringReader("some input"));

    using (App app = new App())
    {
        // input = Console.In.ReadToEnd(); happens here
        result = app.Run(args);
    }

    if (result != 0)
    {
        Assert.Fail("Failed");
    }
}
finally
{
    Console.SetIn(oldIn);
}

关于c# - 模拟测试中的标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13601175/

相关文章:

c# - CollectionViewSource 实时排序不起作用

c# - 我如何在 XNA 中获取和设置像素数据?

android - 输入类型 = "text"时强制使用数字键盘

c# - 使用 C# 和 wpf 创建一个类似应用程序的停靠点

c# - 如何在不使用 TryUpdateModel() 的情况下更新数据库

c# - 我如何 Moq IFindFluent 才能使对 ToListAsync 的调用有效?

c# - 当类相互依赖或外部数据时如何使用单元测试?

angularjs - Jasmine spy 方法返回未定义

javascript - 如何对输入标签中的两个数字求和?

css - 如何将 HTML5 范围输入设置为在 slider 前后具有不同的颜色?