Я бы обычно выбирал отдельную опцию пакета - но тогда я не использую stack test --coverage
.Спасибо за то, что познакомили меня с этим!
(Правка: я бы, вероятно, сделал это, а затем использовал бы опцию test flag только для запуска stack test --coverage --flag thepackage:arbitrary
, чтобы больше никому не приходилось иметь дело с флагами.)
Может также стоить поднять проблему --coverage
на трекере проблем stack
, так как в этом случае будет полезно проверить покрытие.
Вы запрашиваете другие варианты -лучшим из них, вероятно, является тестовый флаг.
тестовый флаг
Можно определить флаг в вашем файле cabal (по умолчанию false), который будет создавать модули только с вашей зависимостью QuickCheckесли флаг установлен.
Поместите нужный код в каталог arbitrary
(например).Затем добавьте эквивалент следующего к соответствующим частям вашего файла package.yaml
(1-й фрагмент) или the-library.cabal
(2-й фрагмент):
flags:
arbitrary:
description: Compile with arbitrary instances
default: false
manual: true
library:
⁝
when:
- condition: flag(arbitrary)
dependencies:
- QuickCheck
source-dirs:
- arbitrary
flag arbitrary
description: Compile with arbitrary instances
manual: True
default: False
library
⁝
if flag(arbitrary)
hs-source-dirs:
arbitrary
build-depends:
QuickCheck
Затем пакеты, которые хотят использоватьэкземпляры должны добавить следующее в свои stack.yaml
(1-й) или cabal.project
(2-й) файлы:
flag:
the-library:
arbitrary: true
constraints: the-library +arbitrary
Но есть небольшая проблема ... в настоящее время нет возможности для этой библиотеки толькозависит от версии +arbitrary
только в его наборе тестов, если только он не определяет такой флаг.Это может быть цена, которую стоит заплатить.
Примечание: я еще не тестировал нижележащую упаковку.
Блог Ивана Миленовича был полезен в качестве начального ресурса.
DerivingVia / Generic instance
Может быть еще одна возможность, теперь, когда GHC 8.6 выпущен, с DerivingVia
.В Blöndal, Löh & Scott (2018) для Arbitrary
экземпляров есть пример.
Вы бы создали оболочки нового типа и внедрили Arbitrary
для этих новых типов.
Это не совсем помогает избежать проблемы, как есть.Но вы можете реализовать Generic
для этих новых типов таким образом, чтобы экземпляры, выводимые с использованием generic-arbitrary
, соответствовали желаемому.
Могут быть и другие варианты.В частности, зависимости QuickCheck
не так уж и тяжелы.И есть и другие библиотеки тестирования.Кроме того, обратите внимание, что было некоторое обсуждение разделения Arbitrary
-подобного класса типов на отдельную библиотеку.
Я бы также предложил внутренние библиотеки, но это не позволяет другим пакетам использовать ваши экземпляры.