相关疑难解决方法(0)

使用Monadic QuickCheck测试IO操作

有人能给我一个使用Monadic QuickCheck测试IO操作的简单示例吗?

io haskell quickcheck

49
推荐指数
2
解决办法
5613
查看次数

模拟IO操作:getArgs和putStrLn

我正在尝试测试一个带有命令行参数并将其输出到屏幕的小功能(或更确切地说是IO Action)。我原来的(无法调试的)功能是:

-- In Library.hs
module Library where

import System.Environment (getArgs)

run :: IO ()
run = do
  args <- getArgs
  putStrLn $ head args
Run Code Online (Sandbox Code Playgroud)

细算这个答案约嘲讽,我想出了一个办法来嘲笑getArgsputStrLn使用类型的类约束类型。因此,以上功能变为:

-- In Library.hs
module Library where

class Monad m => SystemMonad m where
  getArgs :: m [String]
  putStrLn :: String -> m ()

instance SystemMonad IO where
  getArgs = System.Environment.getArgs
  putStrLn = Prelude.putStrLn

run :: SystemMonad m => m ()
run = do
  args <- Library.getArgs
  Library.putStrLn $ …
Run Code Online (Sandbox Code Playgroud)

monads haskell unit-testing mocking hunit

5
推荐指数
1
解决办法
394
查看次数

标签 统计

haskell ×2

hunit ×1

io ×1

mocking ×1

monads ×1

quickcheck ×1

unit-testing ×1