我在C#控制台应用程序中测试“Console in”和“Console out”时遇到了问题。
如果我使用Console.WriteLine和Console.ReadLine,我可以使用NUnit框架来测试该应用程序,但是如果我使用一个帮助类来进行输入输出,我无法使其正常工作。
这个帮助类是https://open.kattis.com/download/Kattio.cs,它使用BufferedStream向控制台写入数据,但我无法让我的测试读取它...
它使用StreamReader用于“Console in”,但我得到了一个“NoMoreTokenException”,我猜测没有得到任何输入...
我想使用这个帮助类,但我无法进行测试...
例如:
[Test]
public void test_hello_world ()
{
using (var sw = new StringWriter ()) {
Console.SetOut (sw);
using (var sr = new StringReader ("Start")) {
Console.SetIn (sr);
MainClass.Main(new string[]{});
string expected = "Hello World!\n";
Assert.AreEqual (sw.ToString (), expected);
}
}
}
例子:工作的代码:
string line = "";
if (Console.ReadLine().Equals("Start"))
line = "Hello World!";
else
line = "No such luck!";
Console.WriteLine (line);
Ex: 代码无法运行:
string line = "";
Scanner sc = new Scanner ();
if (sc.Next ().Equals ("Start"))
line = "Hello World!";
else
line = "No such luck!";
BufferedStdoutWriter outWritter = new BufferedStdoutWriter ();
outWritter.WriteLine (line);
outWritter.Flush ();
有没有任何关于如何解决这个问题的见解?
Console.OpenStandardInput
的文档,它说:“此方法可用于在SetIn方法更改标准输入流后重新获取标准输入流。” 我理解这意味着它正在撤消Console.SetIn
,因此实际上是从控制台而不是您的StringReader
读取。 - juharr