这可能是一个基本问题,但我已经在谷歌上搜索了一段时间......我有一个 Cabal 化的 Haskell 项目,我正在为其编写集成测试。我希望能够将我的项目的测试资源包含在同一存储库中并在测试中访问它们。例如,以下是我想要完成的几件事:
1) 将虚拟数据库实例签入我的存储库,其中包括启动数据库进程的 shell 脚本。我想编写一个 Hspec 集成测试来启动数据库进程,对其进行一些调用,然后将其关闭。所以我需要能够找到 shell 脚本,以便我可以在其上使用
System.Process.createProcess
。
2)签入成对的“输入”和“输出”文件。我的测试应该处理每个输入文件并将它们与相应的输出文件进行比较以确保它们匹配。 (我读过有关“golden”的内容,但它似乎并没有解决首先查找/读取输入文件的问题?)
简而言之,如何在 Haskell 项目的根文件夹中创建一个“资源”文件夹并在测试中找到它的路径?
查看使用输入和输出文件的现有项目。
以haddock为例,源代码位于https://github.com/haskell/haddock。他们在文件夹下有测试文件(https://github.com/haskell/haddock/tree/master/html-test/ref),并且它们在 cabal 文件中被引用为额外源文件(https ://github.com/haskell/haddock/blob/master/haddock.cabal)。然后测试代码(https://github.com/haskell/haddock/blob/master/html-test/run.lhs)使用一些CPP宏(
__FILE__
)来获取当前目录,然后可以解析与该文件夹相关的文件。
我认为所提出的问题没有得到令人满意的回答。具体来说,我们想回答以下问题:
src/test/resources
,但AFAICT,Haskell中没有这样的约定。因此,将文件放在测试目录中(大概在相同的模块名称下)对我来说是有意义的。
例如,如果被测试的代码在模块A.B
中,那么将测试数据放在目录test/A/B
中即可。readFile test/A/B/file.txt
。