gpt4 book ai didi

调用 Console.ReadLine() 的方法的 C# 单元测试

转载 作者:可可西里 更新时间:2023-11-01 08:31:01 26 4
gpt4 key购买 nike

我想为一个名为 ScoreBoard 的类的成员函数创建一个单元测试,该类存储游戏中的前五名玩家。

问题是我为 (SignInScoreBoard) 创建测试的方法正在调用 Console.ReadLine() 因此用户可以输入他们的名字:

public void SignInScoreBoard(int steps)
{
if (topScored.Count < 5)
{
Console.Write(ASK_FOR_NAME_MESSAGE);
string name = Console.ReadLine();
KeyValuePair<string, int> pair = new KeyValuePair<string, int>(name, steps);
topScored.Insert(topScored.Count, pair);
}
else
{
if (steps < topScored[4].Value)
{
topScored.RemoveAt(4);
Console.Write(ASK_FOR_NAME_MESSAGE);
string name = Console.ReadLine();
topScored.Insert(4, new KeyValuePair<string, int>(name, steps));
}
}
}

有没有办法插入十个用户,这样我就可以检查是否存储了五个移动(步骤)较少的用户?

最佳答案

您需要将调用 Console.ReadLine 的代码行重构为一个单独的对象,以便您可以在测试中使用您自己的实现将其 stub 。

举个简单的例子,你可以像这样创建一个类:

public class ConsoleNameRetriever {
public virtual string GetNextName()
{
return Console.ReadLine();
}
}

然后,在您的方法中,将其重构为采用此类的实例。但是,在测试时,您可以使用测试实现覆盖它:

public class TestNameRetriever : ConsoleNameRetriever {
// This should give you the idea...
private string[] names = new string[] { "Foo", "Foo2", ... };
private int index = 0;
public override string GetNextName()
{
return names[index++];
}
}

测试时,用测试实现替换实现。

当然,我个人会使用一个框架来使这更容易,并使用一个干净的界面而不是这些实现,但希望上面的内容足以给你正确的想法......

关于调用 Console.ReadLine() 的方法的 C# 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3161341/

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