Answers:
正确进行单元测试,代码覆盖率和基准测试主要是关于选择正确的工具。
我将以一个正在运行的示例作为示例,该软件包刚刚开始用于单元测试,代码覆盖率和基准测试:
http://github.com/ekmett/speculation
您可以将测试和基准测试直接添加到组织文件中,方法是为它们添加部分,并在标记后将它们掩盖,以免它们出现,从而使库中的每个用户都可以访问(并希望自己使用) )您选择的测试工具的确切版本。
http://github.com/ekmett/speculation/blob/master/speculation.cabal
然后,您可以告诉cabal如何运行测试套件。由于尚未进行全面测试-今年夏天的代码中有一位学生正在研究它!-我们拥有的最佳机制是如何使用Cabal的用户挂钩机制。这意味着使用cabal切换到“自定义”构建并设置一个testHook。一个testHook的示例可以运行一个用test-framework编写的测试程序,然后将hpc应用于它的配置文件,可以在这里找到:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
然后,您可以使用测试框架将QuickCheck和HUnit测试捆绑到一个程序中:
http://github.com/ekmett/speculation/blob/master/Test.hs
那里的cabal文件小心地打开-fhpc以启用代码覆盖率测试,然后Setup.lhs中的testHook手动运行hpc并将其输出写入dist目录。
对于基准测试,故事是更多手动操作,没有“ cabal基准测试”选项。您可以将基准测试连接到测试挂钩中,但是我喜欢手动运行它们,因为Criterion有许多图形报告选项。您可以如上所述将基准测试添加到cabal文件中,为它们提供单独的编译标志,将它们隐藏在cabal标志后面,然后使用Criterion进行所有繁重的工作:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
然后,您可以从命令行运行基准测试,并弹出带有基准测试结果的KDE窗口等。
由于实际上在开发Haskell代码时您总是生活在阴谋中,因此将您的工具链与其集成在一起非常有意义。
编辑:阴谋测试支持现在确实存在。请参阅http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
cabal test
和cabal bench
,混炼HUnit
,doctest
和quickcheck
基于与测试criterion
基准。speculation
之前cabal test
和之后的代码cabal bench
。
对于测试,我依赖于HUnit和QuickCheck属性,并使用Haskell测试框架自动收集所有单元测试和所有QuickCheck属性。
免责声明:我是Haskell测试框架的主要开发人员。
cabal bench
现在同样存在。