【发布时间】:2018-07-07 17:04:57
【问题描述】:
令我震惊的是,我真的不知道用黑盒测试与 Cabal 打包的可执行文件的方法。
例如,使用 npm,我可以运行任意 shell 命令,而且我当然可以连接它,以便转换和执行必要的源代码,并检查它们的副作用。
Stack(如 here 所说) 构建可执行文件并将它们发布到 $PATH 以供测试套件使用,这样我就可以轻松运行它们。
但是对于 Cabal,测试套件显然甚至不能依赖于可执行文件,因此无法强制构建后者。 (我错了吗?)即使那样,我也必须知道编译后的二进制文件的路径。
我该如何解决这个问题?
我的情况的细节是可执行文件必须广泛分析系统的状态和相应的分支,我想集成测试它不会忘记这样做。
还请注意,我对直接运行相关的 IO 函数感到不安,因为我发现它不够集成。或者,更确切地说,我希望可以运行单个 IO 函数,并且也将程序作为一个整体运行。就我而言,已经有测试 shell 脚本,但我真的很想“将它们纳入”。
【问题讨论】:
-
我认为 cabal 本身并不支持这一点:github.com/haskell/cabal/issues/5415。但是,您可以轻松地将所有代码(包括
main)移动到内部library节(github.com/haskell/cabal/pull/3022),然后手动运行与可执行文件运行相同的main函数。您也可以将可执行文件的所有源添加到hs-source-dirs,然后所有内容都将构建两次——一次用于实际可执行文件,一次用于测试——但可以从测试套件中导入。我会推荐便利库的方法。 -
@PeterAmidon 恰好是我在几个小时前提交了这张票。我想我应该澄清这个问题。
-
哦,抱歉。我觉得你在票里说的没错,我只是把它作为一个方便的总结。您是否只是在寻找适合您用例的通用方法之一的更充实的版本?
-
@PeterAmidon 根本不需要道歉。我在问题中添加了一条注释,希望能澄清这一方面。此外,您同意我收集到的关于测试包的
executable部分的信息,这令人心旷神怡。我的问题主要是是否可以运行完整的、构建的可执行文件,以便完全确信它会按照包装盒上的说明进行操作。如果没有,我将简单地向 Cabal 提交另一个问题。 -
啊哈,我现在明白了。如果您不介意第二个(主要是虚拟的)阴谋集团项目,我认为可能有办法做到这一点,但我正在研究它。
标签: haskell testing integration-testing cabal black-box-testing