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

21

我有一些数据文件,它们只属于我的测试程序,并且在与主要库一起分发时可能会引起混淆。

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

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

有没有一种自然的方式将这些文件与我的测试程序关联起来,以便它们只在指定--enable-tests时被复制?

如果没有更好的方法,我可能会使用Template Haskell将它们嵌入到可执行文件中,然后在运行时再写出来或类似的操作,但感觉很丑陋。

1个回答

8

没有Cabal属性可以让您将数据文件与测试套件(或构建的任何非全局段)关联起来。

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

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


1
这是否意味着测试套件二进制文件必须猜测源代码的位置? - GS - Apologise to Monica
1
Ganesh,我编辑了我的回复以解决测试数据文件位置的问题。 - Peter Simons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接