我使用Haskell的Tasty框架进行测试。当我获取并清除资源时,可以使用withResource
Delicious的功能来实现:
withResource :: IO a -> (a -> IO ()) -> (IO a -> TestTree) -> TestTree
其中a
是资源类型。但是我想保留资源,如果测试失败,并且仅在测试通过时才清除它们。怎么可能?
答案 0 :(得分:1)
测试失败(至少在tasty-hunit
中为implemented as exceptions。 withResource
和bracket
的目的是即使有例外,也可以释放资源。如果您这样编写直线代码,则只有在断言通过的情况下,资源才会被释放:
testCase "resource management" $ do
a <- allocate
assertBool =<< runTest
cleanUp a
答案 1 :(得分:1)
这有点棘手,但是您可以使用AllSucceed依赖项并定义一个虚拟测试,该测试可以清除您的资源,但仅在某些其他测试成功的情况下才可以运行。
一个警告是,可以通过某种模式将这种清除测试过滤掉。
或者,我认为我会接受一个请求请求,该请求会添加withResource版本以及附加的Outcome
参数。