如何在美味的测试中进行IO?

时间:2018-12-14 15:08:39

标签: haskell

Tasty支持资源,因此我可以获取资源,测试与该资源有关的一些数据(完全)并释放该资源。但是如何在测试功能中执行一些IO操作?

这是文档中的示例:

import Test.Tasty
import Test.Tasty.HUnit

-- assumed defintions
data Foo
acquire :: IO Foo
release :: Foo -> IO ()
testWithFoo :: Foo -> Assertion
(acquire, release, testWithFoo) = undefined

main = do
  defaultMain $
    withResource acquire release tests

tests :: IO Foo -> TestTree
tests getResource =
  testGroup "Tests"
    [ testCase "x" $ getResource >>= testWithFoo
    ]

所以我的资源是一些连接(例如套接字)。而且我需要在testWithFoo中进行API调用,因此它不能仅返回Assertion,而必须返回IO中。怎么做?还是只有纯测试支持美味?

1 个答案:

答案 0 :(得分:1)

根据tasty-hunit documentationAssertionIO ()的类型同义词。

type Assertion = IO ()

这意味着您可以在测试内进行API调用而不会出现问题。