仅在 cabal 测试套件中包含数据文件

Including data files only in cabal test suites

我有一些数据文件只属于我的测试程序,如果与主库一起分发会造成混淆。

不幸的是,.cabal data-files field 仅适用于整个 cabal 文件,而不是像 test-suite 这样的单个部分。如果我尝试在测试套件节中使用它,我只会得到:

Warning: ssh.cabal: Unknown fields: data-files (line 71)

是否有一种自然的方式将这些文件与我的测试程序相关联,以便仅在指定 --enable-tests 时才复制它们?

如果没有更好的办法,我可能会使用模板 Haskell 将它们嵌入到可执行文件中,然后在运行时或类似的地方再次将它们写出来,但感觉很难看。

没有允许您将数据文件与测试套件(或您构建的任何非全局节)相关联的 Cabal 属性。

此问题的常见解决方案是在 extra-source-files 属性中声明这些文件。该属性也是全局的,它确保列出的文件包含在发布 tarball 中,以便测试套件可以在 运行 时找到它们。然而,与 data-files 不同的是,extra-source-files 没有安装——这可能是你想要的,因为你的测试套件也没有安装。因此这些文件在构建期间可用(和测试套件 运行),但它们不会在安装中占用 space。

cabal-installstack 这样的构建驱动程序将执行测试套件,当前工作目录指向项目的顶级目录,即在包含项目的 Cabal 文件的目录中.因此,如果您在 test/my-data-file.txt 处有一个数据文件,那么您的测试套件可以使用该路径访问该文件。