gpt4 book ai didi

c# - 如何对 "console.readLine"进行单元测试以获取无效输入?

转载 作者:太空狗 更新时间:2023-10-29 22:05:38 25 4
gpt4 key购买 nike

我正在为这个小问题摸不着头脑。

我在一个方法中有这条线和其他 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com