[Haskell-beginners] HSpec output option
Baa
aquagnu at gmail.com
Wed Sep 13 08:22:55 UTC 2017
I will answer myself, because it is possible that someone will need
this answer. Reason of the problem was with one "test operator" only:
`==>` - it's something like imlication but has one difference. I
implemented own (standard) implication as:
(-->) :: Bool -> Bool -> Bool
True --> True = True
True --> False = False
False --> True = True
False --> False = True
infixr 0 -->
and use it instead of `==>`. And with this operator (used in QuickCheck
properties testing) I get output of case's values which leads to fail in
my tests. So, test looks like:
...
describe "Some func test" $ do
prop "negative input becomes positive" $ do
\n -> n < 0 --> someFunc n >= 0
...
To see all QuickCheck generated values, I can use alternative
(verbose) `property` and `prop` funcs:
verbproperty :: Testable prop => prop -> Expectation
verbproperty p = verboseCheckResult p >>= (`shouldBe` True) . isSuccess
verbprop :: (HasCallStack, Testable prop) => String -> prop -> Spec
verbprop s = it s . vproperty
All is for HSpec tests (with QuickCheck properties)...
===
Best regards, Paul
> Hello, Dear List!
>
> I have tests: I'm using HSpec (and QuickCheck too). And I have tests
> like this:
>
> describe "Something" $ do
> it "something is correct" $ do
> ...blah-blah...
> it "any string is correct" $ property $
> \s -> all (=='*') (Something s) -- it's for example only!!!
>
> so something like unit-test and property checks in one
> SomethingSpec.hs.
>
> I'm running them with this Makefile:
>
> .PHONY: test fast-test
>
> fast-test:
> stack exec runhaskell -- -isrc -itest test/Spec.hs
>
> test:
> stack test
>
> and in Spec.hs I have:
>
> {-# OPTIONS_GHC -F -pgmF hspec-discover #-}
>
> That's all. So, when I find failed test, I get a trace like this:
>
> ...
> Failures:
>
> test/SomethingSpec.hs:172:
> 1) BlahBlah.superFunc any string is correct:
> result Gave up after 48 tests
> ...etc...
>
> So, my question is: when QuichCheck runs my property test, it passes
> argument to property's lambda. And on 48th test attempt with some
> concreate argument value my check fails. How can I get detailed output
> from such test environment, to see what concreate arguments lead to
> failure? To see something (or similar/or more detailed even):
>
> Failed with arguments: s = ""
>
> Is it possible (I run them with stack and with runhaskell too) ?
>
> ===
> Best regards, Paul
More information about the Beginners
mailing list