首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于SmallCheck和美味的不纯性能测试:资源获取

基于SmallCheck和美味的不纯性能测试:资源获取
EN

Stack Overflow用户
提问于 2019-06-18 12:31:44
回答 1查看 77关注 0票数 2

我试图用好吃的库和SmallCheck编写基于属性的测试。但在属性检查函数中需要IO,也需要I/O资源。因此,我将现有的测试转化为:

代码语言:javascript
复制
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) -> ...体内,而是在它之前。有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-18 16:11:34

您可以使用withResource。根据文档,它将把您的IO Cfg转换成一个IO Cfg,从而生成一个“将只获得一次并在树中的所有测试中共享”的资源。

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

代码语言:javascript
复制
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...
    ]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56649242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档