模拟测试中的标准输入

时间:2012-11-28 08:52:31

标签: 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");

1 个答案:

答案 0 :(得分:1)

您可以将控制台输入替换为您自己的对象,例如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);
}