Istnieje kilka domen aplikacji (np. GameDev), w których wiele funkcji powinno być tworzonych przy użyciu losowych wartości do generowania ich wyników. Jeden z przykładów jest przedstawiony poniżej:W jaki sposób sprawdzić poprawność funkcji, które używają losowo?
def generate_key(monster_key_drop_coef):
key_letters = string.ascii_uppercase
rand = random.random()
if monster_key_drop_coef < rand:
return None
button = {}
button["type"] = random.choice([1,2,3])
button["letter"] = random.choice(key_letters)
return button
Ta funkcja generuje spadek elementu w oparciu o kilka losowych operacji. Problem pojawia się, jeśli chcesz potwierdzić automatyczną poprawność tej funkcji. Wygenerowane wartości nie są deterministyczne, a pisanie testów regresji wydaje się niemożliwe.
Moje pytania są następujące:
- Czy to możliwe, aby napisać użytecznych testów regresji dla tego typu funkcji?
- Czy istnieje ogólne podejście do tworzenia innych rodzajów testów w tym przypadku?
Istnieją całe książki napisane na ten temat. Przykład: http://www.johndcook.com/Beautiful_Testing_ch10.pdf –
Prześmiewanie RNG w celu dostarczenia znanych wyników (a następnie testowanie z określonymi wynikami, dla których znany jest znany wynik) jest jednym podejściem. –