Тест нечистых свойств с SmallCheck и Tasty: получение ресурсов - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь написать тест на основе свойств с библиотекой Tasty и 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) -> ..., а до него.Возможно ли это?

1 Ответ

3 голосов
/ 18 июня 2019

Вы можете использовать withResource.Согласно документации, он преобразует ваш IO Cfg в IO Cfg, который даст ресурс, который "будет получен только один раз и распределен по всем тестам в дереве."

Это также дает вам функцию Cfg -> IO (), где вы можете освободить значение Cfg, если это необходимо.Я оставил эту функцию в качестве запретной на данный момент здесь (\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...
    ]
...