[Haskell-cafe] ANNOUNCE: Chell: A quiet test runner (low-output alternative to test-framework)
trystan.s at comcast.net
trystan.s at comcast.net
Thu Aug 11 21:47:07 CEST 2011
As Greg pointed out, HSpec does have an option to output just the failed tests. I looked at the example on the Chell project home page and converted the example tests into these hspec style specs:
> import Test.Hspec (Specs, descriptions, describe, it)
> import Test.Hspec.Runner (hHspecWithFormat)
> import Test.Hspec.Formatters (failed_examples)
> import Test.Hspec.HUnit
> import Test.HUnit
> import System.IO (stdout)
> -- some functions to test
> equal = (==)
> greater = (>)
> equalWithin = undefined
> equalLines = (==)
> specs :: IO Specs
> specs = descriptions [
> describe "number comparison module" [
> it "can check for equality"
> (assertBool "1 should equal 1" $ equal 1 1),
> it "can compare order"
> (assertBool "2 should be greater than 1" $ greater 2 1),
> it "can compare eqauality with floating point numbers"
> (assertBool "1.0001 should be close enough to 1.0" $ equalWithin 1.0001 1.0 0.01)
> describe "text comparison module" [
> it "can compare strings for equality"
> (let str1 = "foo\nbar\nbaz" :: String
> str2 = "foo\nbar\nqux" :: String
> in assertBool "foo\\nbar\\nbaz shouldn't equal foo\\nbar\\nqux" $ equalLines str1 str2)
> main = hHspecWithFormat (failed_examples True) stdout specs
And when run, got the following output in red text since it's only reporting failures:
] x can compare eqauality with floating point numbers FAILED 
] x can compare strings for equality FAILED 
] 1) number comparison module can compare eqauality with floating point numbers FAILED
] 2) text comparison module can compare strings for equality FAILED
] foo\nbar\nbaz shouldn't equal foo\nbar\nqux
] Finished in 0.0000 seconds
] 4 examples, 2 failures
You can write provide your own formatter if that's not what you'd like to see. You also don't have to use the HUnit assertion text either; you could use the following function to make your specs even more like your Chell example, at the cost of losing the extra output description:
> assert = assertBool ""
Hspec uses HUnit TestCases and assertions but also supports QuickCheck properties almost exactly the same way Chell does. The hspec project homepage (https://github.com/trystan/hspec) has more examples, including the specs for hspec itself.
From: "John Millikin" <jmillikin at gmail.com>
To: "Greg Weber" <greg at gregweber.info>
Cc: "trystan s" <trystan.s at comcast.net>, haskell-cafe at haskell.org
Sent: Thursday, August 11, 2011 8:21:52 AM
Subject: Re: ANNOUNCE: Chell: A quiet test runner (low-output alternative to test-framework)
On Thu, Aug 11, 2011 at 08:17, Greg Weber <greg at gregweber.info> wrote:
> I am confused also, as to both what output you don't like that motivated
> chell and what exactly hspec silences :) Suffice to say I am able to get a
> small relevant error message on failure with hspec. I am adding the hspec
> maintainer to this e-mail- he can answer any of your questions.
The output I didn't like wasn't coming from HUnit, it was coming from
the test aggregator I used (test-framework). It prints one line per
test case run, whether it passed or failed.
That means every time I ran my test suite, it would print *thousands*
of lines to the terminal. Any failure immediately scrolled up and out
of sight, so I'd have to either Ctrl-C and hunt it down, or wait for
the final report when all the tests had finished running.
Chell does the same thing as test-framework (aggregates tests into
suites, runs them, reports results), but does so quietly. It only
reports failed and aborted tests.
More information about the Haskell-Cafe