如果我有一个接受out参数并接受输入表单控制台的函数 -
public void Test(out int a)
{
a = Convert.ToInt16(Console.ReadLine());
}
如何在NUnit测试期间使用Console.Readline()接受输入?如何使用NUnit测试此方法?
我尝试将此代码用于我的NUnit测试用例 -
[TestCase]
public void test()
{
int a = 0;
ClassAdd ad = new ClassAdd();
ad.addition(out a);
//a should be equal to the value I input through console.Readline()
Assert.AreEqual(<some value I input>, a, "test");
}
如何测试接受out参数的方法并接受来自Console的用户输入?
答案 0 :(得分:3)
您可以使用SetIn
的{{1}}方法设置输入源:
System.Console
编辑:要测试多个值,只需用新行分隔每个输入:
StringReader reader = new StringReader("some value I input" + Enivronment.NewLine);
Console.SetIn(reader);
int a = 0;
ClassAdd ad = new ClassAdd();
ad.addition(out a);
Assert.AreEqual(<some value I input>, a, "test");
答案 1 :(得分:2)
这里有两个略有不同的问题。
最值得注意的是,您要测试从控制台获取输入的方法。即这意味着用户互动。这不是你想“自动化测试”的方法吗?
在回答#2时,我建议你看看Misko Hevery的一些关于编写可测试代码的文章和视频。
http://misko.hevery.com/2008/08/21/where-have-all-the-singletons-gone/
有关您问题的简要摘要:
MethodToTest
目前需要来自控制台的输入。MethodToTest
的类应在其构造函数中使用“输入流”。 (这是一种称为依赖注入的技术。)[TestCase]
public void test()
{
<use appropriate type here> MockInputStream = new ...;
ClassToTest testClass = new ClassToTest(MockInputStream);
int Actual = 0;
MockInputStream.PutNextInput("4");
ClassToTest.MethodToTest(out Actual);
Assert.AreEqual(4, Actual, "MockInputStream placed 4 as the next value to read");
}