У меня есть набор методов Happstack.State MACID, которые я хочу протестировать с помощью QuickCheck, но мне трудно найти самый элегантный способ сделать это. Проблемы, с которыми я сталкиваюсь:
- Единственный способ оценить вычисление монады
Ev
— в монадеIO
черезquery
илиupdate
. - Невозможно создать только хранилище MACID в памяти; это предусмотрено. Следовательно, работа в монаде
IO
означает наличие временных файлов, которые нужно очищать после каждого теста. - Невозможно инициализировать новое хранилище MACID, кроме как с
initialValue
для состояния; он не может быть сгенерирован черезArbitrary
, если я не выставлю метод доступа, который заменяет оптовую продажу состояния. - Обход всего вышеперечисленного означает написание методов, которые используют только функции
MonadReader
илиMonadState
(и запуск теста внутриReader
илиState
вместоEv
. Это означает отказ от использованияgetRandom
илиgetEventClockTime
и т.п. внутри определений методов.
Единственные варианты, которые я вижу, это:
- Запустите методы в одноразовом хранилище MACID на диске, выполняя очистку после каждого теста и каждый раз начиная с
initialValue
. - Напишите методы, чтобы большая часть кода выполнялась в
MonadReader
илиMonadState
(что легче тестировать), и полагайтесь на небольшое количество клея, не поддерживающего QuickCheck, вокруг него, который вызываетgetRandom
илиgetEventClockTime
по мере необходимости.
Есть ли лучшее решение, которое я пропускаю?