4

我是一名具有多种语言背景的程序员,但最近专注于 Ruby/Rails 并且对学习一些 Haskell 感兴趣。我在 Closure 中也做了一些尝试(不过是非常基本的东西)。

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

响应者:请耐心等待我的投票和回答接受。为了进行任何评估,我实际上必须在 Haskell 中做一些工作。谢谢。

4

3 回答 3

7

通常,Haskell 应用程序中的事实来源是类型系统。您使用 quickcheck 和 hspec 来增加对您的代码执行您的想法的保证,但这只是一种帮助。

于 2013-08-18T12:19:10.817 回答
2

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

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

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

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

于 2015-05-16T14:32:23.377 回答
1

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

这是一个示例,来自 HSpec 网站的逐字记录

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
于 2013-08-18T20:36:06.550 回答