C# 如何测试从Console.ReadLine读取的线程,即如何写入Console';谁的输入?
我有一个线程可以通过console.ReadLine从控制台读取数据,但为了为该线程构建单元测试,我想基本上写入控制台的输入,我尝试了以下方法:C# 如何测试从Console.ReadLine读取的线程,即如何写入Console';谁的输入?,c#,unit-testing,C#,Unit Testing,我有一个线程可以通过console.ReadLine从控制台读取数据,但为了为该线程构建单元测试,我想基本上写入控制台的输入,我尝试了以下方法: Stream inputStream = Console.OpenStandardInput(); StreamWriter sw = new StreamWriter(inputStream); sw.WriteLine("foo"); 但是线程没有看到文本?还有别的办法吗?我想你需要在这个问题上后退一步。您所做的是将应用程序耦合到控制台。而你真的
Stream inputStream = Console.OpenStandardInput();
StreamWriter sw = new StreamWriter(inputStream);
sw.WriteLine("foo");
但是线程没有看到文本?还有别的办法吗?我想你需要在这个问题上后退一步。您所做的是将应用程序耦合到控制台。而你真的应该把它分开。。。下面是一些伪代码: 您的应用程序
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);
// ...
}
我认为你需要在这个问题上后退一步。您所做的是将应用程序耦合到控制台。而你真的应该把它分开。。。下面是一些伪代码: 您的应用程序
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);
// ...
}
我实际上使用了这种方法:StreamReader sr=newstreamreader(“multile1.txt”);控制台设置(sr);成功了!我实际上使用了这种方法:StreamReader sr=newstreamreader(“multile1.txt”);控制台设置(sr);成功了!