-- | 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 /T/ext orientation -- with output to the /T/erminal.) -- -- @ -- \> 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 -- \> -- @ module Test.HUnit ( module Test.HUnit.Base, module Test.HUnit.Text ) where import Test.HUnit.Base import Test.HUnit.Text