QuickCheck を使用してテストしたい Happstack.State MACID メソッドのセットがありますが、それを達成するための最もエレガントな方法を見つけるのに苦労しています。私が直面している問題は次のとおりです。
Evモナド計算を評価する唯一の方法は、またはIOを介してモナド内で行うことです。queryupdate- 純粋にインメモリ MACID ストアを作成する方法はありません。これは設計によるものです。したがって、
IOモナドで実行するということは、各テスト後にクリーンアップする一時ファイルがあることを意味します。 initialValue状態を除いて、新しい MACID ストアを初期化する方法はありません。Arbitraryステート ホールセールを置き換えるアクセス メソッドを公開しない限り、生成することはできません。- 上記のすべてに対処するということは、
MonadReaderor ( の機能のみを使用するメソッドを記述し、 orの代わりにMonadStateテストを実行することを意味します。これは、メソッド定義内でorなどを使用しないことを意味します。ReaderStateEvgetRandomgetEventClockTime
私が見ることができる唯一のオプションは次のとおりです。
- 使い捨てのディスク上の MACID ストアでメソッドを実行し、各テスト後にクリーンアップし、毎回開始するように調整し
initialValueます。 - ほとんどのコードが
MonadReaderorで実行されるようにメソッドを記述し (テストがより簡単です)、必要に応じてorMonadStateを呼び出す、その周りの少量の QuickCheck 不可の接着剤に依存します。getRandomgetEventClockTime
私が見落としているより良い解決策はありますか?