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