如何测试从Console.ReadLine读取的线程,即如何写入控制台的输入?

时间:2015-01-12 14:05:20

标签: c# unit-testing

我有一个通过Console.ReadLine从控制台读取的线程,但为了构建该线程的单元测试,我想基本上写入控制台的输入,我试过这个:< / p>

Stream inputStream = Console.OpenStandardInput();
StreamWriter sw = new StreamWriter(inputStream);
sw.WriteLine("foo");

但线程没有看到文字?还有另一种方式吗?

1 个答案:

答案 0 :(得分:4)

我认为你需要退一步。您所做的就是将您的应用程序连接到控制台。你真的应该把它分开......这是一些伪代码:

您的申请

public interface IUserInput
{
    string ReadInput();
}

public class ConsoleInput : IUserInput
{
    public ReadInput()
    {
        return Console.ReadLine();
    }
}

public class YourClass
{
    IUserInput _userInput;

    // Can inject TEST or REAL input
    public YourClass(IUserInput userInput)
    {
        _userInput = userInput;
    }

    // ... Your code
    public void YourMethod()
    {
        var doSomething = _userInput.ReadInput();
    }
}

您的测试

public class TestInput : IUserInput
{
    public ReadInput()
    {
        return "This is dummy data";
    }
}

[Test]
public void MyTest()
{
    var testInput = new TestInput();
    var systemUnderTest = new YourClass(testInput);
    // ...
}