如何有条件地拆掉Tasty中的测试平台资源?

时间:2019-01-10 12:55:04

标签: unit-testing haskell testing

我使用Haskell的Tasty框架进行测试。当我获取并清除资源时,可以使用withResource Delicious的功能来实现:

withResource :: IO a -> (a -> IO ()) -> (IO a -> TestTree) -> TestTree

其中a是资源类型。但是我想保留资源,如果测试失败,并且仅在测试通过时才清除它们。怎么可能?

2 个答案:

答案 0 :(得分:1)

测试失败(至少在tasty-hunit中为implemented as exceptionswithResourcebracket的目的是即使有例外,也可以释放资源。如果您这样编写直线代码,则只有在断言通过的情况下,资源才会被释放:

testCase "resource management" $ do
    a <- allocate
    assertBool =<< runTest
    cleanUp a        

答案 1 :(得分:1)

这有点棘手,但是您可以使用AllSucceed依赖项并定义一个虚拟测试,该测试可以清除您的资源,但仅在某些其他测试成功的情况下才可以运行。

一个警告是,可以通过某种模式将这种清除测试过滤掉。

或者,我认为我会接受一个请求请求,该请求会添加withResource版本以及附加的Outcome参数。