我有以下单元测试:
[TestMethod]
public void NewGamesHaveDifferentSecretCodesTothePreviousGame()
{
var theGame = new BullsAndCows();
List<int> firstCode = new List<int>(theGame.SecretCode);
theGame.NewGame();
List<int> secondCode = new List<int>(theGame.SecretCode);
theGame.NewGame();
List<int> thirdCode = new List<int>(theGame.SecretCode);
CollectionAssert.AreNotEqual(firstCode, secondCode);
CollectionAssert.AreNotEqual(secondCode, thirdCode);
}
当我在调试模式下运行它时,我的代码通过了测试,但是当我正常运行测试(运行模式)时它没有通过。抛出的异常是:
CollectionAssert.AreNotEqual failed. (Both collection contain same elements).
这是我的代码:
// constructor
public BullsAndCows()
{
Gueses = new List<Guess>();
SecretCode = generateRequiredSecretCode();
previousCodes = new Dictionary<int, List<int>>();
}
public void NewGame()
{
var theCode = generateRequiredSecretCode();
if (previousCodes.Count != 0)
{
if(!isPreviouslySeen(theCode))
{
SecretCode = theCode;
previousCodes.Add(previousCodes.Last().Key + 1, SecretCode);
}
}
else
{
SecretCode = theCode;
previousCodes.Add(0, theCode);
}
}
previousCodes是类的一个属性,它的数据类型是Dictionary 键整数,值 List of integers。SecretCode也是类上的一个属性,它的数据类型是一个整数列表
如果我猜测一下,我会说原因是再次调用了 NewGame() 方法,而第一次调用还没有真正完成它需要做的事情。如您所见,在 NewGame() 方法中调用了其他方法(例如 generateRequiredSecretCode())。
在调试模式下运行时,我按 F10 的缓慢速度为进程提供了足够的时间结束。
但我不确定如何解决这个问题,假设我对原因的识别是正确的。