自定义 QuickCheck 失败消息

Custom QuickCheck failed message

test1 = hspec $ do
  describe "blabla" $ do
    it "should be equl" $ verbose $
      \input-> ...

在上面的代码中,当测试失败时,它会打印失败的 input。但我实际上对可以从 input 计算出的另一个值感兴趣。我可以要求 QuickCheck 打印另一个值吗?

不知何故,我从未见过它做广告,但您可以在 QuickCheck 属性中使用 hspec 的期望。这是一个例子:

  describe "blabla" $ do
    it "should be equl" $ verbose $ \input ->
      round input `shouldBe` floor (input :: Double)

上面的属性显然不是真的,所以应该失败。因为我们不仅对 input 感兴趣,还想知道它的计算值,shouldBe 会给我们这样的信息:

  3) blabla should be equl
       Falsifiable (after 2 tests and 4 shrinks):
         0.6
       expected: 0
        but got: 1

自然地,由于 verbose,只有 input 会为通过的测试打印,而计算值(例如 round input)只会为失败的测试用例打印,无论如何,这就是您要找的东西。