Safe Haskell | None |
---|---|
Language | Haskell2010 |
HUnit-Plus is a unit testing framework for Haskell, based on the older HUnit framework.
To use HUnit-Plus, first import the module Test.HUnitPlus:
import Test.HUnitPlus
HUnit-Plus provides the same succinct syntax for defining test as HUnit. However, HUnit-Plus tests use the data structures from Distribution.TestSuite to describe tests, as opposed to the data structures used by HUnit.
test1 = "test1" ~: (assertEqual "for (foo 3)," (1,2) (foo 3)) test2 = "test2" ~: (do (x,y) <- partA 3 assertEqual "for the first result of partA," 5 x b <- partB y assertBool ("(partB " ++ show y ++ ") failed") b)
You can also use the datatypes in Distribution.TestSuite to define your tests, or import tests that were defined that way.
test3 = Test (TestInstance { ... }) testgroup1 = Group { ... }
Additionally, you can use the Test.HUnitPlus.Legacy module to define tests in the old HUnit fashion. The test-creation operators will convert them into HUnit-Plus tests.
import qualified Test.HUnitPlus.Legacy as Legacy test4 = "test4" ~: Test (assertEqual "a == b" a b) testgroup2 = TestList [TestLabel "testFoo" testBar, TestLabel "testBar" testBar]
You can add tags to tests as well:
test1Tags = testTags ["demo"] test1 test5 = testNameTags "test5" ["demo"] (a @?= b)
You can also create groups of tests:
testgroup3 = "group3" ~: [ test1, test2, testgroup1, test3 ]
At the top level, group tests into suites.
suite = TestSuite { suiteName = "suite", suiteTests = [ testgroup3, test4 ], ... }
The createMain
function in Test.HUnitPlus.Main can be used to
easily define a main
for a test execution program.
main = createMain suite
The resulting program has a number of options for executing tests and reporting the results, which are documented in Test.HUnitPlus.Main, as well as in the program's "usage" output. Briefly, you can execute all tests by running the program without arguments.
$> ./testprog
You can select tests to be run by supplying a filter:
$> ./testprog group3.test1 $> ./testprog @demo
You can also generate various kinds of reports, and control console output:
$> ./testprog --xmlreport --txtreport --consolemode=quiet --testlist=tests
You can also use the topLevel
function to supply options to test
execution and get the result, allowing limited integration with a
larger test execution framework. (Test.HUnitPlus.Execution has
even more options).