Автоматически выполняющиеся юнит-тесты в Haskell - PullRequest
2 голосов
/ 19 февраля 2020

Есть ли способ запустить мои тестовые наборы с моей командой build? Все, что я могу найти, это то, что я могу запустить, например, cabal test после cabal build. Мне нужен способ автоматического запуска моих тестов при запуске, например, cabal build.

. Мне нужно решение, которое автоматизирует это для всех, кто собирает пакет, без необходимости запуска другого скрипта. В качестве аналогии можно привести сценарий сборки java, в котором цель сборки по умолчанию выполняет модульные тесты после компиляции.

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

Вы можете использовать cabal.project.local, чтобы сделать это при использовании проектов cabal v2 (как, например, cabal v2-build, который является значением по умолчанию и, таким образом, таким же, как cabal build для cabal версии 3.0 и выше).

Стратегия заключается в том, чтобы просто поместить файл cabal.project.local в каталог сборки с содержанием:

tests: true
1 голос
/ 20 февраля 2020

Я считаю, что это действительно плохая идея, так как это неожиданное, неканоническое поведение, которое нарушает кросс-компиляцию, но вы, вероятно, можете взломать его вместе с типом сборки Custom.

Вот пример mypackage.cabal:

cabal-version:       >=2.0
name:                mypackage
version:             0.1.0.0
author:              None
maintainer:          none@example.com
build-type:          Custom

custom-setup
  setup-depends:
    base  >= 4.5,
    Cabal >= 2.0

executable mypackage
  main-is: Main.hs
  build-depends: base >= 4
  default-language: Haskell2010

test-suite test
  type: exitcode-stdio-1.0
  build-depends: base >= 4
  main-is: Test.hs

и соответствующий Setup.hs:

import Control.Monad
import Distribution.Simple
import Distribution.Simple.Setup
import Distribution.Simple.Test
import Distribution.Simple.Build

main = defaultMainWithHooks simpleUserHooks {
  postBuild = myPostBuild
}

myPostBuild args flags desc info =
  when ("exe:mypackage" `elem` buildArgs flags) $ do
    build desc info defaultBuildFlags { buildDistPref = buildDistPref flags } []
    test ["test"] desc info defaultTestFlags {
      testDistPref = buildDistPref flags
    }

В результате получается проект, в котором cabal build также строит и запускает тесты на моей системе Cabal 3.0.0.0, но я не знаю, какие дополнительные предостережения это имеет.

...