Лучшие практики Haskell QuickCheck (особенно при тестировании классов типов)

Я только начал использовать QuickCheck с кучей кода на Haskell. Я отстал от жизни, я знаю.Этот вопрос состоит из двух частей:

Во-первых, каковы общие рекомендации по быстрой проверке? На данный момент я понял следующее:

  • Назовите ваши тесты prop_* (раздражает, потому что все остальное в camelCase)
  • Тестируйте экспортированный код (если вы тестируете внутренности, вы, вероятно, делаете это неправильно)
  • Проверяйте свойства, а не примеры
    • Не говорите X вне диапазона, Y находится в диапазоне
    • Вместо этого скажите , если x вне диапазона, нормализуйте x ≠ x(или какое-либо другое подобное свойство)

Но я все еще цепляюсь за другие передовые практики. В частности:

  • Где хранится имущество?
    • Тот же файл?
    • в каталоге test/? (Если да, то как импортировать материал в src/?)
    • в каталог Properties/в src?

Самое главное, как мы обычно проверяем свойства классов типов? Например, рассмотрим следующий (упрощенный) класс типов:

class Gen a where
    next :: a -> a
    prev :: a -> a

Я хочу проверить свойство ∀ x: prev (next x) == x. Конечно, это включает в себя написание тестов для каждого экземпляра. Утомительно писать одно и то же свойство для каждого экземпляра, особенно когда тест более сложный. Каков стандартный способ обобщить такие тесты?

19
задан So8res 6 April 2012 в 00:45
поделиться