在Haskell中自动运行单元测试

时间:2020-02-19 18:34:54

标签: haskell cabal

有没有一种方法可以使用我的build命令运行测试套件?我所能找到的就是我可以跑步cabal test之后的cabal build。我想要的是一种在例如运行时自动运行测试的方法cabal build

我想要一个解决方案,该解决方案将对构建软件包的任何人自动执行此操作,而无需他们运行其他脚本。一个比喻是一个Java构建脚本,其中默认构建目标在编译后运行单元测试。

2 个答案:

答案 0 :(得分:2)

在使用Cabal v2项目时,您可以使用cabal.project.local来执行此操作(例如,cabal v2-build是默认设置,因此与Cabal 3.0版及更高版本的cabal build相同)

该策略只是将cabal.project.local文件放置在构建目录中,其内容为:

tests: true

答案 1 :(得分:1)

我发现这是一个非常糟糕的主意,因为它是意外的,非规范的行为,会破坏交叉编译,但是您可以将其与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系统上构建并运行测试,但是我不知道这还有哪些附加说明。

相关问题