Safe Haskell | Safe-Infered |
---|
Test.HUnit
Description
HUnit is a unit testing framework for Haskell, inspired by the JUnit tool for Java. This guide describes how to use HUnit, assuming you are familiar with Haskell, though not necessarily with JUnit.
In the Haskell module where your tests will reside, import module
Test.HUnit
:
import Test.HUnit
Define test cases as appropriate:
test1 = TestCase (assertEqual for (foo 3), (1,2) (foo 3)) test2 = TestCase (do (x,y) <- partA 3 assertEqual for the first result of partA, 5 x b <- partB y assertBool ((partB ++ show y ++ ) failed) b)
Name the test cases and group them together:
tests = TestList [TestLabel test1 test1, TestLabel test2 test2]
Run the tests as a group. At a Haskell interpreter prompt, apply the function
runTestTT
to the collected tests. (The TT suggests Text orientation
with output to the Terminal.)
> runTestTT tests Cases: 2 Tried: 2 Errors: 0 Failures: 0 >
If the tests are proving their worth, you might see:
> runTestTT tests # Failure in: 0:test1 for (foo 3), expected: (1,2) but got: (1,3) Cases: 2 Tried: 2 Errors: 0 Failures: 1 >
You can specify tests even more succinctly using operators and overloaded functions that HUnit provides:
tests = test [ test1 ~: (foo 3) ~: (1,2) ~=? (foo 3), test2 ~: do (x, y) <- partA 3 assertEqual for the first result of partA, 5 x partB y @? (partB ++ show y ++ ) failed ]
Assuming the same test failures as before, you would see:
> runTestTT tests # Failure in: 0:test1:(foo 3) expected: (1,2) but got: (1,3) Cases: 2 Tried: 2 Errors: 0 Failures: 1 >