J'ai un test unitaire qui repose sur un jet de dés aléatoires. Je lance un dé de 20 faces et si la valeur est 20 cela compte comme un coup critique.boucle dans test unité mauvaise?
Ce que je fais droit est maintenant rouler le 20 dégrossi meurent jusqu'à 300 fois. Si l'un de ces jets est un 20 alors je sais que j'ai eu un coup critique.
Voici ce que le code ressemble à:
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
}
Bien que le test fait exactement ce que je veux qu'il Je ne peux pas aider mais se sentir comme si je fais quelque chose de mal.
Sur le même sujet, la classe DiceRoll a d'autres informations aussi bien, mais ma question est spécifiquement sur la boucle dans un test unitaire, donc je l'ai laissé sortir pour le rendre plus clair
+1 Exactement ce que j'étais en train d'écrire. – APC
Rappelle-moi de la bande dessinée xkcd: "int rolldice() {return 4;} // généré par le dé réel, garanti d'être aléatoire". –
+1 pour un exemple gentil/propre. –