Как лучше всего писать тесты Perl, предполагающие случайность?

Работая над некоторыми обновлениями моего модуля List :: Gen , я решил добавить -> pick (num) , который вернет список случайных элементов размером num из своего источника. Чтобы проверить это, я использовал srand для заполнения генератора случайных чисел, и провел несколько тестов вида:

srand 1234;
is $src->pick(5)->str, '3 6 1 7 9';

И все это хорошо работало на машине Windows, на которой я был в то время. Однако, когда я перенес проект на рабочую станцию ​​Mac, все тесты случайности не прошли, поскольку, несмотря на то же самое случайное начальное число, rand давал разные результаты. Я так понимаю, это из различных базовых реализаций C rand () .

Итак, вопрос в том, каков наилучший кроссплатформенный способ тестирования этих функций? Стоит ли перегрузить функцию rand своей собственной? Следует ли мне встроить перехватчики в функции, использующие rand , чтобы включить режим «тестирования», который дает предсказуемый результат? Существуют ли другие методы?

Я бы предпочел ответы, включающие основные методы Perl, так как я стараюсь, чтобы дерево зависимостей модуля было небольшим.

Test :: Random и Test :: MockRandom кажутся предложениями CPAN, есть ли у кого-нибудь опыт работы с этими модулями?

6
задан Eric Strom 19 April 2011 в 18:54
поделиться