作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为这个小问题摸不着头脑。
我在一个方法中有这条线和其他 3 个类似的线
try
{
int PhoneIMEINumber = int.Parse(Console.ReadLine());
}
{
catch(Exception)
{
return null;
}
如果用户输入“abcd”作为输入,这会引发异常,我可以捕获它并显示错误消息。
但是我该如何对此进行单元测试呢?我当然无法模拟来自单元测试的控制台输入,我想从我的单元测试中检查是否返回了 null。
谢谢
最佳答案
如果你想对 Console
进行单元测试,那么你可能需要创建一个包装器接口(interface)。
public interface IConsole
{
string ReadLine();
}
public class ConsoleWrapper : IConsole
{
public string ReadLine()
{
return Console.ReadLine();
}
}
通过这种方式,您可以创建 Stub/Fake 来测试您的业务规则。
public class TestableConsole : IConsole
{
private readonly string _output;
public TestableConsole(string output)
{
_output = output;
}
public string ReadLine()
{
return _output;
}
}
测试内部:
public class TestClass
{
private readonly IConsole _console;
public TestClass(IConsole console)
{
_console = console;
}
public void RunBusinessRules()
{
int value;
if(!int.TryParse(_console.ReadLine(), out value)
{
throw new ArgumentException("User input was not valid");
}
}
}
[Test]
public void TestGettingInput()
{
var console = new TestableConsole("abc");
var classObject = new TestClass(console);
Assert.Throws<ArgumentException>(() => classObject.RunBusinessRules());
}
我会尝试避免对 Console
进行单元测试并依赖它。
关于c# - 如何对 "console.readLine"进行单元测试以获取无效输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888635/
我是一名优秀的程序员,十分优秀!