Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 作为测试套件的一部分,我是否可以从同一个包中构建和运行可执行文件?_Haskell_Testing_Integration Testing_Cabal_Black Box Testing - Fatal编程技术网

Haskell 作为测试套件的一部分,我是否可以从同一个包中构建和运行可执行文件?

Haskell 作为测试套件的一部分,我是否可以从同一个包中构建和运行可执行文件?,haskell,testing,integration-testing,cabal,black-box-testing,Haskell,Testing,Integration Testing,Cabal,Black Box Testing,令我震惊的是,我真的不知道有什么方法可以黑盒测试用Cabal打包的可执行文件 例如,使用npm,我可以运行任意shell命令,我当然可以连接它,以便传输和执行必要的源代码,并检查它们的副作用 Stack(如前所述)构建可执行文件并将其发布到测试套件的$PATH中,因此我可以轻松地运行它们 但对于Cabal,测试套件显然甚至不能依赖于可执行文件,因此无法强制构建后者。(我错了吗?)即使这样,我也必须知道编译后的二进制文件的路径 我如何处理这个问题 我的具体情况是,一个可执行文件必须广泛地分析系统和

令我震惊的是,我真的不知道有什么方法可以黑盒测试用Cabal打包的可执行文件

例如,使用
npm
,我可以运行任意shell命令,我当然可以连接它,以便传输和执行必要的源代码,并检查它们的副作用

Stack(如前所述)构建可执行文件并将其发布到测试套件的
$PATH
中,因此我可以轻松地运行它们

但对于Cabal,测试套件显然甚至不能依赖于可执行文件,因此无法强制构建后者。(我错了吗?)即使这样,我也必须知道编译后的二进制文件的路径

我如何处理这个问题

我的具体情况是,一个可执行文件必须广泛地分析系统和相应分支的状态,我想进行集成测试,以确保它不会忘记这样做


还要注意的是,我不喜欢直接运行相关的
IO
函数,因为我发现它不够完整。或者,更确切地说,我希望它能够运行单个
IO
函数,并作为一个整体运行程序。在我的例子中,已经有了测试shell脚本,但我真的很想“烘焙它们”。

事实证明,有一种(稍微有点黑)的方法可以做到这一点,至少现在,使用新的(ish)
构建工具取决于
Cabal字段。有人讨论过(,)构建工具依赖于只在构建时可用,并且在运行组件时应该有一个单独的可执行文件字段。然而,这个独立的运行时工具依赖字段还不存在。幸运的是,Cabal(至少2.1和2.2)似乎完全没有区分:当运行测试套件时,
Cabal new test
中列出的可执行文件实际上是可用的。这意味着您可以使用如下所示的
pkg.cabal
文件:

name: pkg
executable exe
  ...
test-suite test
  ...
  build-tool-depends: pkg:exe

当您运行测试套件时,将在路径上构建可执行文件。

我认为cabal不支持这一点:。但是,您可以轻松地将所有代码(包括
main
)移动到内部
节(),然后手动运行与可执行文件运行相同的
main
函数。您也可以只将可执行文件的所有源代码添加到
hs source dirs
,然后所有内容都将构建两次——一次用于实际可执行文件,一次用于测试——但可从测试套件导入。我会推荐便利图书馆的方法。@PeterAmidon碰巧是我在几个小时前提交了这张罚单。我想我应该澄清这个问题。哦,对不起。我认为你在票上说的是对的,我只是用它作为一个方便的总结。你只是在寻找一种更充实的通用方法版本,它应该适合你的用例吗?@PeterAmidon不需要道歉。我在问题中添加了一个注释,希望能够澄清这一方面。此外,您对我收集的关于测试包的
可执行文件部分的信息表示赞同,这是令人心旷神怡的。我的问题主要是,是否有可能运行完整的、构建的可执行文件,以便完全相信它会按照盒子上的说明执行。如果不是的话,我会把另一个问题提交给阴谋集团。啊哈,我现在明白了。我想如果你不介意第二个(大部分是假的)阴谋集团项目的话,有一种方法可以做到这一点,但我正在研究它。