Control.Proxy.Tutorialをご覧ください。あなたがあなたのタイプの周りのプロキシラッパーを書くことができるならば、あなたは簡単にテストインタフェースと、このような実際のインターフェイスを入れ替えることができます。
client <-< simulatedServer
client <-< realServer
編集:コメントにあなたの質問に答えるためには、次のように記述するServer
を使用しますあなたのsimpleHTTP
リクエストのラッパー:シミュレートされたサーバーは次のようになり
realServer
:: HStream ty => Request ty -> Server (Request ty) (Result (Response ty)) IO r
realServer = foreverK $ \req -> do
result <- lift $ simpleHTTP req
respond result
:
simulatedServer
:: (Monad m, HStream ty)
=> Request ty -> Server (Request ty) (Result (Response ty)) m r
simulatedServer = foreverK $ \req -> do
result <- lift $ simulatedRequest req
respond result
そして、あなたのクライアントはリクになりますE:
client
:: (Monad m, HStream ty) =>() -> Client (Request ty) (Result (Response ty)) m r
client() = forever $ do
let req = <something>
result <- request req
lift $ doSomethingWith result
次に、あなたが使用して実サーバと偽のサーバーをテストすることができます。
-- Test the real server
main = runSession $ client <-< realServer
-- Test the fake server
main = runSession $ client <-< simulatedServer
client
とsimulatedServer
は、私が何をベースモナド彼らは希望を知らないだけであるため、ベースモナドで多形性あなたのテストのために使用してください。唯一の要件は、あなたが構成する2つのものが同じ基本モナドを持つか、少なくとも1つが基本モナドの多形であるということです。
私はVCRのアイデアに基づいてHaskellプロジェクトを開始しました。 https://github.com/cordawyn/havcr –