Posiadanie powtarzalnej sekwencji "losowej" jest przydatne w testowaniu scenariuszy.
Można na przykład użyć go do testowania silnika gry w celu upewnienia się, że sztuczna inteligencja prawidłowo wybierała cele lub ścieżki - nawet jeśli ma losową ocenę ścieżki.
Oto bardzo uproszczony przykład. Bez względu na to, ile razy uruchomisz ten test, zawsze wybierze te same trzy karty, gdy otrzyma ten sam podstawowy generator liczb losowych. Może to być przydatne w celu zapewnienia, że użyty generator liczb losowych to ten, który został dostarczony. Z jakiegoś powodu, gdyby nowy generator liczb losowych został wprowadzony bez zmiany testu, test zakończyłby się niepowodzeniem.
[TestMethod]
public void TestRandomPicking()
{
Random random = new Random(1);
Deck deck = new Deck(random);
Assert.AreEqual(3, deck.PickCard().Value);
Assert.AreEqual(1, deck.PickCard().Value);
Assert.AreEqual(5, deck.PickCard().Value);
}
public class Deck
{
public Deck()
{
_randomizer = new Random();
}
public Deck(Random randomizer)
{
_randomizer = randomizer;
}
Random _randomizer;
private List<Card> _cards = new List<Card>
{
new Card {Value = 1},
new Card {Value = 2},
new Card {Value = 3},
new Card {Value = 4},
new Card {Value = 5},
new Card {Value = 6},
new Card {Value = 7},
new Card {Value = 8},
new Card {Value = 9},
new Card {Value = 10}
};
private List<Card> Cards { get { return _cards; } }
public Card PickCard()
{
return Cards[_randomizer.Next(0, Cards.Count - 1)];
}
}
public class Card
{
public int Value { get; set; }
}
W niektórych aplikacjach powtarzalność nie jest konieczna. Mogę wymyślić sytuacje, w których chciałbyś je ręcznie obsadzić, ale nigdy osobiście nie potrzebowałem go jawnie ustawić. – Davy8
@ Davy8 - to prawda - w prawie wszystkich moich aplikacjach również nie potrzebuję seeda, ale "Random" nadal obejmuje tę funkcję. – BrokenGlass
Mam program psów wyścigowych, które poruszają się losowo, a jeden wygrywa. Czy rozwiązaniem jest zrobienie tego samego nasienia? –