Control.Proxy.Tutorialを確認してください。タイプの周りにプロキシラッパーを記述できる場合は、テストインターフェイスと実際のインターフェイスを次のように簡単に交換できます。
client <-< simulatedServer
client <-< realServer
編集:コメントで質問に答えるには、aを使用してリクエスト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
そして、クライアントは次のようになります。
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つがベースモナドで多型であることです。