有没有一种方法可以使用我的build命令运行测试套件?我所能找到的就是我可以跑步cabal test
之后的cabal build
。我想要的是一种在例如运行时自动运行测试的方法cabal build
。
我想要一个解决方案,该解决方案将对构建软件包的任何人自动执行此操作,而无需他们运行其他脚本。一个比喻是一个Java构建脚本,其中默认构建目标在编译后运行单元测试。
答案 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系统上构建并运行测试,但是我不知道这还有哪些附加说明。