gpt4 book ai didi

unit-testing - 仅使用 Hunit 在 Haskell 中创建和运行最小测试套件

转载 作者:行者123 更新时间:2023-12-05 03:17:06 25 4
gpt4 key购买 nike

我是 Haskell 的新手,如果我的术语不太正确,请提前致歉。

我想为一个非常简单的项目实现一些简单的单元测试,通过 cabal 管理。我注意到 this very similar question ,但这并没有真正帮助。 This one也没有(它提到了美味,见下文)。

认为我可以通过仅使用 HUnit 来完成此操作 - 但是,我承认我对网上指南中谈论的所有其他“事物”感到有点困惑:

  • 我不太欣赏the difference between the interfaces exitcode-stdio-1.0detailed-0.9
  • 我不确定使用 HUnitQuickcheck 或其他工具的差异(或中长期)影响?
  • HUnit 指南中提到的 tasty 的作用是什么。

因此,我尝试将所有“附加”包排除在外,并尽可能将其他所有内容保留为“默认”,并执行了以下操作:

$ mkdir example ; mkdir example/test
$ cd example
$ cabal init

然后编辑 example.cabal 并添加此部分:

Test-Suite test-example
type: exitcode-stdio-1.0
hs-source-dirs: test, app
main-is: Main.hs
build-depends: base >=4.15.1.0,
HUnit
default-language: Haskell2010

然后我用以下内容创建了 test/Main.hs:

module Main where

import Test.HUnit

tests = TestList [
TestLabel "test2"
(TestCase $ assertBool "Why is this not running," False)
]

main :: IO ()
main = do
runTestTT tests
return ()

最后,我尝试运行全部:

$ cabal configure --enable-tests && cabal build && cabal test
Up to date
Build profile: -w ghc-9.2.4 -O1
In order, the following will be built (use -v for more details):
- example-0.1.0.0 (test:test-example) (additional components to build)
Preprocessing test suite 'test-example' for example-0.1.0.0..
Building test suite 'test-example' for example-0.1.0.0..
Build profile: -w ghc-9.2.4 -O1
In order, the following will be built (use -v for more details):
- example-0.1.0.0 (test:test-example) (ephemeral targets)
Preprocessing test suite 'test-example' for example-0.1.0.0..
Building test suite 'test-example' for example-0.1.0.0..
Running 1 test suites...
Test suite test-example: RUNNING...
Test suite test-example: PASS
Test suite logged to:
/home/jir/workinprogress/haskell/example/dist-newstyle/build/x86_64-linux/ghc-9.2.4/example-0.1.0.0/t/test-example/test/example-0.1.0.0-test-example.log
1 of 1 test suites (1 of 1 test cases) passed.

而且输出不是我所期望的。我显然在做一些根本性的错误,但我不知道它是什么。

最佳答案

为了让 exitcode-stdio-1.0 测试类型识别失败的套件,您需要安排测试套件的 main 函数以失败退出,以防万一有任何测试失败。幸运的是,有一个 runTestTTAndExit 函数可以处理这个问题,所以如果您将 main 替换为:

main = runTestTTAndExit tests

它应该可以正常工作。

关于unit-testing - 仅使用 Hunit 在 Haskell 中创建和运行最小测试套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74334745/

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