Ruby - > Haskell单元和自动验收测试

时间:2013-08-18 10:30:23

标签: unit-testing haskell bdd acceptance-testing

我是一名具有多种语言背景的程序员,但最近专注于Ruby / Rails并且有兴趣学习一些Haskell。我已经在Closure中做了一些游戏(虽然很基本的东西)。

我目前开发新Ruby应用程序的首选方法是从使用Gherkin / Cucumber之类的业务价值语言开始高级测试,然后使用RSpec或Minitest之类的东西开发小规模组件。 (目前)开发新Haskell应用程序的最常见的类似工具集和策略是什么?

响应者:请耐心等待投票&回答我的接受。我必须在Haskell中做一些工作才能进行任何评估。感谢。

3 个答案:

答案 0 :(得分:7)

通常,Haskell应用程序中的真实来源是类型系统。您可以使用quickcheck和hspec来确保您的代码符合您的想法,但这只是一种帮助。

答案 1 :(得分:2)

对于Haskell中基于故事的自动验收测试,您有两个主要选择:

  • chuchu(Haskell本身的一个不完整的Cucumber / Gherkin实现,Hackage page
  • Cucumber使用Wire协议和用Ruby编写的测试

当然,HSpec填补了基于规范的验收测试角色。

使用基于属性的测试而不是使用QuickCheck和Smallcheck等库的TDD,可以获得更好的结果。

答案 2 :(得分:1)

据我所知,Haskell没有Cucumber类似物。最接近您正在寻找的可能是HSpec,这是RSpec-ish。

以下是一个示例,verbatim from the HSpec site

import Test.Hspec
import Test.QuickCheck
import Control.Exception (evaluate)

main :: IO ()
main = hspec $ do
  describe "Prelude.head" $ do
    it "returns the first element of a list" $ do
      head [23 ..] `shouldBe` (23 :: Int)

    it "returns the first element of an *arbitrary* list" $
      property $ \x xs -> head (x:xs) == (x :: Int)

    it "throws an exception if used with an empty list" $ do
      evaluate (head []) `shouldThrow` anyException

哪个产生

Prelude.head
  - returns the first element of a list
  - returns the first element of an *arbitrary* list
  - throws an exception if used with an empty list