
On 06/24/2014 04:55 PM, Gautier DI FOLCO wrote:
Hi all,
I'm a huge fan of TDD (Test-Driven Development) et I used to use tools such as RSpec (Ruby). So naturally, I looked to HSpec, but it seems not idiomatic in Haskell. I have a bunch of questions: - Do you do TDD? - Which tools do you use? - Is doctest "better" (in some senses) than HSpec? Why? - Are HSpec and Doctest complementary? If so, in which case do you use one or another? - Is there some Haskell-specific good practices do to TDD?
Thanks in advance for your lights.
I like to use doctests for examples because they double as documentation. So if you have a function that's supposed to lowercase a string, you might show, -- Caps get lowercased: -- -- >>> lowercase_it "HELLO" -- "hello" -- -- And lowercase letters are left alone: -- -- >>> lowercase_it "hello" -- "hello" -- -- Numbers are unaffected: -- -- >>> lowercase_it "123" -- "123" -- -- It doesn't crash on the empty string: -- -- >>> lowercase_it "" -- "" -- If you think it would be useful to the reader, make it a doctest. For tests with a big setup/teardown -- like 20 lines of inserting junk into the database -- I use HUnit instead. For properties like idempotence, there's QuickCheck. I usually start out with doctest, because everything needs an example. Then if complicated tests or properties arise, I'll create a tasty[1] suite with HUnit[2]/QuickCheck[3] tests. Tasty basically groups all of your HUnit, QuickCheck, SmallCheck, etc. tests into one big suite with nicely-formatted output. HSpec is redundant once you have all of that in place, so I personally haven't found a niche for it yet. [1] http://hackage.haskell.org/package/tasty [2] http://hackage.haskell.org/package/tasty-hunit [3] http://hackage.haskell.org/package/tasty-quickcheck