ランダムなサイコロのロールに依存する単体テストがあります。私は 20 面ダイスを振って、値が 20 の場合、クリティカル ヒットとしてカウントします。
私が今していることは、20 面ダイスを 300 回まで転がすことです。これらのロールのいずれかが 20 の場合、クリティカル ヒットが発生したことがわかります。
コードは次のようになります。
public class DiceRoll
{
public int Value { get; set; }
public bool IsCritical { get; set; }
// code here that sets IsCritical to true if "Value" gets set to 20
}
[Test]
public void DiceCanRollCriticalStrikes()
{
bool IsSuccessful = false;
DiceRoll diceRoll = new DiceRoll();
for(int i=0; i<300; i++)
{
diceRoll.Value = Dice.Roll(1, 20); // roll 20 sided die once
if(diceRoll.Value == 20 && diceRoll.IsCritical)
{
IsSuccessful = true;
break;
}
}
if(IsSuccessful)
// test passed
else
// test failed
}
テストは私が望んでいることを正確に実行しますが、何か間違ったことをしているように感じずにはいられません。
関連して、DiceRoll クラスには他の情報も含まれていますが、私の質問は特に単体テストでのループに関するものなので、より明確にするために省略しました