gpt4 book ai didi

haskell - 如何在 bash 测试中使用 cabal

转载 作者:行者123 更新时间:2023-12-03 14:07:55 25 4
gpt4 key购买 nike

对于我的项目,我编写了一些单元测试作为 bash 脚本。在 Haskell 中编写测试确实没有合理的方法。

我希望这些脚本在我输入 cabal test 时运行.我该如何做到这一点?

最佳答案

该模块将允许您运行所有 .sh特定子目录中的脚本作为测试。此外,这使用 test-framework包,以便您可以根据需要运行测试:

cabal test '--test-option=--jxml=dist/test/$test-suite.xml'

然后,您可以从测试中获取 junit 样式的 XML。目前已在 my project for testing cabal things 中 checkin .测试代码:
import Data.List (isSuffixOf)
import Control.Applicative
import Test.Framework (defaultMain, testGroup, Test)
import Test.Framework.Providers.HUnit
import Test.HUnit (assertFailure)
import System.Directory
import System.Exit (ExitCode(..))
import System.Process


main :: IO ()
main = makeTests "test" >>= defaultMain

-- Make a test out of those things which end in ".sh" and are executable
-- Make a testgroup out of directories
makeTests :: FilePath -> IO [Test]
makeTests dir = do
origDir <- getCurrentDirectory
contents <- getDirectoryContents dir
setCurrentDirectory dir
retval <- mapM fileFunc contents
setCurrentDirectory origDir
return $ concat retval
where
fileFunc "." = return []
fileFunc ".." = return []
fileFunc f | ".sh" `isSuffixOf` f = do
fullName <- canonicalizePath f
isExecutable <- executable <$> getPermissions fullName
let hunitTest = mkTest fullName
return [testCase f hunitTest | isExecutable]
fileFunc d = do
fullName <- canonicalizePath d
isSearchable <- searchable <$> getPermissions fullName
if isSearchable
then do subTests <- makeTests d
return [testGroup d subTests]
else return []
mkTest fullName = do
execResult <- system fullName
case execResult of
ExitSuccess -> return ()
ExitFailure code -> assertFailure ("Failed with code " ++ show code)

我在我的 .cabal 中将此子句与此子句一起使用文件:
test-suite BackflipShellTests
type: exitcode-stdio-1.0
main-is: BackflipShellTests.hs
hs-source-dirs: test
build-depends: backflip, base, test-framework-hunit,
test-framework, directory, process, HUnit
default-language: Haskell2010

请注意,虽然我放置了 .sh tests 和 test 模块在同一目录中(称为 test ),没有内在的理由这样做。

关于haskell - 如何在 bash 测试中使用 cabal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com