我有一个测试项目
test-suite spec
...
benchmark bench
build-depends:
library-test-spec
...我如何依赖基准测试套件代码?上述方法无效,因为名称为library-test-spec
的包不存在。
答案 0 :(得分:3)
您不能依赖test-suite
内部基准测试。此问题的一般解决方案是将您要在test-suite
和基准中使用的函数移动到library
目标中。遗憾的是,这意味着如果常见功能需要一些测试库,那么library
目标将在依赖项中包含这些测试框架。如果您不想要这样的行为,那么您可以将这些函数移动到单独的包中,并在测试和基准测试中依赖于此包。
或者只是将代码从测试复制粘贴到基准测试。
答案 1 :(得分:3)
从Cabal 2.0开始,您可以将公共代码放在一个名为"的内部库"测试套件和基准测试都可以依赖。根据{{3}}:
Cabal 2.0及更高版本支持“内部库”,这是额外的 命名库(与通常的未命名库部分相对)。对于 例如,假设您的测试套件需要访问某些内部 库中的模块,您不想导出它们。 您可以将这些模块放在内部库中,这是主要的 库和测试套件构建依赖于。
便利内部库如下所示:
library foo-internal
exposed-modules: Foo.Internal
build-depends: base
当依赖它时,您不需要放置版本约束,因为相同的包依赖性隐含地引用相同的包实例。
使用内部库,您可以避免双重编译(如同两次包含相同的源时)和阻碍主库(就像将公共代码放在那里一样)。
请务必在cabal-version: >=2
文件中加入.cabal
。