doctest QuickCheck — могу ли я импортировать экземпляры QC только в doctests?

Я использую doctest, и мне нравится тот факт, что я могу тестировать неэкспортированные функции, откуда они определены:

module Foo (frobnicate) where

-- |
-- >>> randomInt = 42
-- True
randomInt :: Int
randomInt = 42

До сих пор я хранил экземпляры QuickCheck в test-suite, поэтому library не зависит от тестовых пакетов, но это означает, что я не могу запускать QuickCheck из doctests.

Я, конечно, не могу использовать doctest и запустить QC из test-suite, но тогда мне придется экспортировать каждую функцию, которую я хочу протестировать.

Есть ли способ иметь doctests, которые используют экземпляры QC без зависимости основного library от QC (и без перезаписи экземпляров в doctest "repl")?


person unhammer    schedule 05.10.2018    source источник
comment
Нельзя ли импортировать модули в блок кода установки doctest?   -  person Li-yao Xia    schedule 05.10.2018
comment
Нет, если они не являются частью библиотеки, насколько я могу судить. (Или, если я могу, я хотел бы знать, как!)   -  person unhammer    schedule 06.10.2018


Ответы (1)


Вот пример того, что вы ищете: https://github.com/sol/doctest#quickcheck-properties

Просто добавьте любой импорт, который вам нужен, в код установки.

person Jonas Duregård    schedule 05.10.2018
comment
Скажем, у меня есть экземпляры, определенные в test/QCInstances.hs, который находится под test-suite клики, который зависит от QuickCheck. Если я сейчас запущу stack exec doctest src/Foo.hs, где Foo находится под library клики, я получу Could not find module ‘QCInstances’. - person unhammer; 06.10.2018
comment
Вы добавили модуль и исходный каталог (тест) в тестовый набор файла Кабала? Вы добавили строку -- >>> import QCInstances под строку -- $setup в файле с доктестами? - person Jonas Duregård; 06.10.2018
comment
Я пытался поместить QCInstances.hs в other-modules из test-suite (кабала жалуется на Unknown field, если я попытаюсь exposed-modules — я думаю, это не поддерживается для тестовых наборов), но это все еще терпит неудачу. Кажется, не имеет значения, пытаюсь ли я импортировать его в -- $setup или в реальном тесте — он все равно не импортируется. И я имею в виду, что это имеет смысл, почему doctest импортирует модули из набора тестов, когда он выполняет реплику основной библиотеки? Так же, как я не могу импортировать какие-либо модули тестового набора при запуске обычного стека repl. - person unhammer; 06.10.2018
comment
Попробуйте добавить -isrc test к параметрам doctest (не совсем уверен, как это сделать с помощью stack exec). В качестве альтернативы вы можете использовать stack test и иметь основной файл для своего набора тестов, который вызывает функцию doctest: github .com/sol/doctest#cabal-integration - person Jonas Duregård; 06.10.2018
comment
stack exec doctest -- -isrc test src/Foo.hs дает test/QCInstances.hs:26:53: Couldn't match expected type ‘QC.Gen MyType’ with actual type ‘QuickCheck-2.8.2@Quick_AOTWGguKtKLBCUhkngiI4l:Test.QuickCheck.Gen.Gen a5 NB: ‘QC.Gen’ is defined in ‘Test.QuickCheck.Gen’ in package ‘QuickCheck-2.8.2@Quick_6TxL5Cx3o2p0HsyT59KWiD’ (и мне пришлось сначала удалить некоторые файлы hs из теста, т. к. я получаю несколько основных файлов) - person unhammer; 07.10.2018