取决于替补席的测试

时间:2018-01-12 13:56:55

标签: haskell cabal

我有一个测试项目

test-suite spec
  ...

benchmark bench
  build-depends:
    library-test-spec

...我如何依赖基准测试套件代码?上述方法无效,因为名称为library-test-spec的包不存在。

2 个答案:

答案 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