У меня есть модульный тест, основанный на случайном броске кубиков. Я бросаю 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 есть и другая информация, но мой вопрос конкретно касается цикла в модульном тесте, поэтому я не упомянул его, чтобы сделать его более понятным.