私は次のユニットテストを持っています:
[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 key integer, value List of integersです。SecretCodeもクラスのプロパティであり、そのデータ型は整数のリストです
推測すると、その理由は NewGame() メソッドが再度呼び出されたのに、最初の呼び出しで必要な処理が実際には完了していないためだと言えます。ご覧のとおり、NewGame() メソッド内から他のメソッドが呼び出されています (例: generateRequiredSecretCode())。
デバッグ モードで実行している場合、F10 キーを押すペースが遅いため、プロセスが終了するのに十分な時間が与えられます。
しかし、原因の特定が正しいと仮定すると、それを修正する方法が本当にわかりません。