Haskell管道和使用HSpec进行测试

亚历克斯

我已经为使用Pipes的项目编写了一个程序,我很喜欢!我正在努力对我的代码进行单元测试。

我有一系列类型的函数Pipe In Out IO ()(例如),我希望使用HSpec进行测试。我该怎么办?

例如,假设我有这个域:

data Person = Person String Int | Unknown deriving (Show, Eq)
data Classification = Friend | Foe | Undecided deriving Show

和这个管道:

classify :: Pipe Person (Person, Classification) IO ()
classify = do
    p@(Person name _) <- await
    case name of 
      "Alex" -> yield (p, Friend)
      "Bob" -> yield (p, Foe)
      _ -> yield (p, Undecided)

我想写一个规范:

main = hspec $ do
  describe "readFileP" $ 
    it "yields all the lines of a file"
      pendingWith "How can I test this Pipe? :("
亚历克斯

诀窍是使用toListM来自Pipes ListTmonad的变压器。

import Pipes
import qualified Pipes.Prelude as P
import Test.Hspec

data Person = Person String Int | Unknown deriving (Show, Eq)
data Classification = Friend | Foe | Undecided deriving (Show, Eq)

classify :: Pipe Person (Person, Classification) IO ()
classify = do
  p@(Person name _) <- await
  case name of 
    "Alex" -> yield (p, Friend)
    "Bob" -> yield (p, Foe)
    _ -> yield (p, Undecided)

该测试,使用ListT转换器将管道转换为ListT并使用HSpec进行断言:

main = hspec $ do
  describe "classify" $ do
    it "correctly finds friends" $ do
      [(p, cl)] <- P.toListM $ each [Person "Alex" 31] >-> classify
      p `shouldBe` (Person "Alex" 31)
      cl `shouldBe` Friend

请注意,您不必使用each,这可以是调用的简单生产者yield

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Haskell管道和使用HSpec进行测试

来自分类Dev

Haskell的HSpec和Delicious入门?

来自分类Dev

使用Hspec运行HUnit测试

来自分类Dev

使用 Hspec 测试用户输入

来自分类Dev

使用OpenSceneGraph进行SSAO,优化和管道

来自分类Dev

使用管道和变量测试grep退出状态失败

来自分类Dev

如何使用hspec测试readerError函数是否已执行

来自分类Dev

使用TensorFlow进行验证和测试

来自分类Dev

使用Wildfly 8和NetBeans进行测试

来自分类Dev

使用Effort和TypeName属性进行测试

来自分类Dev

使用Couchbase进行单元和集成测试

来自分类Dev

使用Jasmine和Karma进行角度测试

来自分类Dev

使用Iunitofwork和IgenericRepository进行Moq测试

来自分类Dev

使用Robolectric和Dagger进行Android测试

来自分类Dev

使用if语句和条件进行过滤:dplyr管道

来自分类Dev

在Mongodb中使用聚合,查找和管道进行查询

来自分类Dev

使用siege vs wrk进行负载测试和基准测试

来自分类Dev

使用超级测试,摩卡和模型进行环回测试

来自分类Dev

Haskell Hspec - 只在命令行标志上运行昂贵的测试

来自分类Dev

使用HSpec和QuickCheck验证Data.Monoid属性

来自分类Dev

使用 Python 和 Pandas 进行 CSV 解析和测试

来自分类Dev

在HSpec中设置测试套件

来自分类Dev

在堆栈中使用HSpec

来自分类Dev

如何对使用Scanner和InputStream的方法进行单元测试?

来自分类Dev

使用XCUIApplication和涵盖的窗口进行OSX UI测试

来自分类Dev

使用PHP匿名类进行测试和模拟

来自分类Dev

使用bash与CMake和CTest进行简单的集成测试?

来自分类Dev

使用Azure和IIS Express进行外部本地测试

来自分类Dev

使用Elif进行Python分配和功能测试

Related 相关文章

热门标签

归档