- By Emmanuel Valverde
- ·
- Posted 22 Mar 2024
Advanced Katas
You have reached the highest level. You have completed the learning phases and we move on to the more complex katas. Remember that in the link of..
I recently implemented the bowling kata in Haskell. In the process, I found out how set up my environment to comfortably do Test Driven Development. Hopefully, others might find this post helpful to begin their journey with the language. I used the following components:
cabal install hspec
.Using the example from Hspec's documentation, I began with this structure for my code:
BowlingTests.hs
module BowlingTests where
import Bowling
import Test.Hspec
import Text.Printf (printf)
testScoreGame :: String -> Int -> Spec
testScoreGame game score =
it (printf “should return the score for game : %s → %d \n” game score) $
scoreGame game `shouldBe` score
main = hspec $ do
describe "scoreGame" $ do
testScoreGame "--------------------" 0
So to test a function, you add a function in your test file, usually the same name with a ‘test’ prefix. This function takes the inputs to your function under test and the expected output as parameters. Then using Hspec you describe what you are testing. As you can see the ‘it’ part is written in the test function. You can of course omit this helper function and write all your tests under main = hspec $ do
, which may be nicer if you want to describe in more detail what each individual test is testing.
Bowling.hs
module Bowling where
scoreGame :: String -> Int
scoreGame game = 0
These files are in the same directory, now I can run my tests from the command line.
$ runhaskell BowlingTests.hs
scoreGame
should return the score for game : — — — — — — — — — — → 0
Finished in 0.0000 seconds
1 example, 0 failures
There you have it. Now I can focus on writing a failing test and making it pass.
You have reached the highest level. You have completed the learning phases and we move on to the more complex katas. Remember that in the link of..
Our recommendation is that you first go through Object-Oriented Programming katas so that you can move on to more complex testing concepts. If so, we..
Once basic concepts such as conditionals, loops, and simple structures have been introduced and reinforced, and TDD has been strictly practiced, it's..
Join our newsletter for expert tips and inspirational case studies
Join our newsletter for expert tips and inspirational case studies