Да, вам нужно либо выполнить достаточно большое количество случаев, чтобы случайность усреднялась, либо сделать случайный источник другим входом для вашей функции или метода, чтобы вы могли проверить его независимо.
Anпример первого рода (это Python, но принцип может применяться на любом языке).
def test_random_number():
total = sum(random.uniform(0, 1) for _ in xrange(1000))
assert 100 < total < 900
Таким образом, этот тест может провалиться, если вам не повезло, но он все же является разумным тестом, поскольку онпройти почти все время, и сделать этот вид теста довольно просто.
Чтобы сделать все правильно, вам нужно ввести случайный источник.
class DefaultRandomBehavior(object):
def pick_left_or_right(self):
return random.choice(['left', 'right'])
class AardvarkModeller(object):
def __init__(self, random_source=None):
self.random_source = random_source or DefaultRandomBehavior()
def aardvark_direction(self):
r = self.random_source.pick_left_or_right()
return 'The aardvark faces ' + r
Теперь вы можетеМодульное тестирование это либо путем макетирования или фальсификации класса DefaultRandomBehavior, тем самым полностью обойдя недетерминизм.