@hackage monad-mock0.2.0.0
A monad transformer for mocking mtl-style typeclasses
Installation
Dependencies (11)
- base >=4.8.0.0 && <5
- constraints >=0.3.1
- exceptions >=0.6
- haskell-src-exts
- haskell-src-meta
- monad-control >=1.0.0.0 && <2 Show all…
Dependents (3)
@hackage/acme-everything, @hackage/language-ninja, @hackage/cloud-seeder
monad-mock 
monad-mock is a Haskell package that provides a monad transformer to help create “mocks” of mtl-style typeclasses, intended for use in unit tests. A mock can be executed by providing a sequence of expected monadic calls and their results, and the mock will verify that the computation conforms to the expectation.
For example, imagine a MonadFileSystem typeclass, which describes a class of
monads that may perform filesystem operations:
class Monad m => MonadFileSystem m where
readFile :: FilePath -> m String
writeFile :: FilePath -> String -> m ()
Using MockT, it’s possible to test computations that use MonadFileSystem
in a completely pure way:
copyFile :: MonadFileSystem m => FilePath -> FilePath -> m ()
copyFile a b = do
x <- readFile a
writeFile b x
makeMock "FileSystemAction" [ts| MonadFileSystem |]
spec = describe "copyFile" $
it "reads a file and writes its contents to another file" $
evaluate $ copyFile "foo.txt" "bar.txt"
& runMock [ ReadFile "foo.txt" :-> "contents"
, WriteFile "bar.txt" "contents" :-> () ]
For more information, see the documentation on Hackage.