在 Haskell 中自动进行 运行 单元测试
Automatically running unit tests in Haskell
有没有办法 运行 我的测试套件与我的构建命令?我所能找到的就是我可以 运行 例如cabal test
在 cabal build
之后。我想要的是一种在 运行 时自动 运行 我的测试的方法,例如cabal build
.
我想要一个解决方案,可以为任何构建包的人自动执行此操作,而不需要他们 运行 不同的脚本。一个类比是 java 构建脚本,其中默认构建目标 运行s 编译后进行单元测试。
我发现这是一个非常糟糕的主意,因为它是破坏交叉编译的意外的非规范行为,但您可以将其与 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 系统上构建和运行测试,但我不知道这有哪些额外的注意事项。
您可以在使用 cabal v2 项目时使用 cabal.project.local
来执行此操作(例如,cabal v2-build
是默认设置,因此与 cabal 3.0 版和 cabal build
相同向上)。
策略只是在构建目录中放置一个 cabal.project.local
文件,其内容为:
tests: true
有没有办法 运行 我的测试套件与我的构建命令?我所能找到的就是我可以 运行 例如cabal test
在 cabal build
之后。我想要的是一种在 运行 时自动 运行 我的测试的方法,例如cabal build
.
我想要一个解决方案,可以为任何构建包的人自动执行此操作,而不需要他们 运行 不同的脚本。一个类比是 java 构建脚本,其中默认构建目标 运行s 编译后进行单元测试。
我发现这是一个非常糟糕的主意,因为它是破坏交叉编译的意外的非规范行为,但您可以将其与 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 系统上构建和运行测试,但我不知道这有哪些额外的注意事项。
您可以在使用 cabal v2 项目时使用 cabal.project.local
来执行此操作(例如,cabal v2-build
是默认设置,因此与 cabal 3.0 版和 cabal build
相同向上)。
策略只是在构建目录中放置一个 cabal.project.local
文件,其内容为:
tests: true