我有一个通过Console.ReadLine从控制台读取的线程,但为了构建该线程的单元测试,我想基本上写入控制台的输入,我试过这个:< / p>
Stream inputStream = Console.OpenStandardInput();
StreamWriter sw = new StreamWriter(inputStream);
sw.WriteLine("foo");
但线程没有看到文字?还有另一种方式吗?
答案 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);
// ...
}