繁体   English   中英

使用SmallCheck和Tasty进行不纯的属性测试:资源获取

[英]Impure property test with SmallCheck and Tasty: resource acquisition

我正在尝试使用Tasty library和SmallCheck编写基于属性的测试。 但是我需要在属性检查功能中使用IO,而且我还需要I / O资源。 所以,我把现有的测试变成了:

myTests :: IO Cfg -> TestTree
myTests getResource = testGroup "My Group"
[
    testProperty "MyProperty" $
    -- HOW TO CALL getResource here, but not in
    -- function, so to avoid multiple acquisition
    -- Some{..} <- getResource
    \(x::X) -> monadic $ do -- HERE I WILL DO I/O...
]

所以,问题是:如何调用getResource一次? 所以,不是在\\(x::X) -> ...体内,而是在它之前。 可能吗?

您可以使用withResource 根据文档,它会将您的IO Cfg转换为IO Cfg ,这将产生一个“只获取一次并在树中的所有测试中共享”的资源

它还为您提供了一个Cfg -> IO ()函数,您可以根据需要释放Cfg值。 我现在把这个函数作为一个no-op( \\cfg -> pure () ),因为我不知道你的资源的性质。

myTests :: IO Cfg -> TestTree
myTests getResource =
  withResource getResource (\cfg -> pure ()) $ \getResource' ->
    testGroup "My Group"
    [
        testProperty "MyProperty" $ \(x::X) -> monadic $ do
            Some{..} <- getResource'
            -- DO I/O...
    ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM