仅在 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-install
和 stack
这样的构建驱动程序将执行测试套件,当前工作目录指向项目的顶级目录,即在包含项目的 Cabal 文件的目录中.因此,如果您在 test/my-data-file.txt
处有一个数据文件,那么您的测试套件可以使用该路径访问该文件。
我有一些数据文件只属于我的测试程序,如果与主库一起分发会造成混淆。
不幸的是,.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-install
和 stack
这样的构建驱动程序将执行测试套件,当前工作目录指向项目的顶级目录,即在包含项目的 Cabal 文件的目录中.因此,如果您在 test/my-data-file.txt
处有一个数据文件,那么您的测试套件可以使用该路径访问该文件。