我在类似的行中发现了其他问题,但在这种特定情况下没有任何问题可以回答我的问题。此外,似乎很少有资源能够简洁地涵盖 Haskell 中单元测试 IO 操作的主题。
假设我有这个类型类用于我的数据库通信:
data Something = Something String deriving Show
class MonadIO m => MonadDB m where
getSomething :: String -> m Something
getSomething s = do
... -- assume a DB call is made and an otherwise valid function
instance MonadDB IO
以及使用它的这个函数:
getIt :: MonadDB m => m (Int, Something)
getIt = do
s@(Something str) <- getSomething "hi"
return (length str, s) -- excuse the contrived example
我希望getIt
用 hspec 测试这个函数,但没有它与数据库通信,这可能意味着替换MonadDB
它使用的,但我该如何实现呢?