2

在 .NET 中,我可以使用以下属性装饰我的程序集:

[<assembly: InternalsVisibleTo("MyProject.Test")>]

因此,所有标记为“内部”的模块都可以从“MyProject.Test”访问。我可以使用它,例如对我不想在我的库中公开的功能进行单元测试。

我想知道 Haskell 的世界中是否有类似的东西。假设我有一个包含以下 .cabal 文件的库:

library
  exposed-modules:  MyLibrary.API
  other-modules:    MyLibrary.Utils
  -- ...

test-suite mylib-test
  -- ...
  build-depends:  base,
                  hspec,
                  my-library

有没有办法从 mylib-test 测试套件中引用“MyLibrary.Utils”?

4

1 回答 1

5

您可以使其成为内部库的一部分,并依赖于公共库和测试套件中的内容。它在包装之外不可用。

library utils
    exposed-modules: MyLibrary.Utils

library
    exposed-modules: MyLibrary.API
    build-depends: utils

test-suite mylib-test
    build-depends: base, hspec, my-library, utils

或者,无论如何都要公开模块,但包括Internal在其名称中并告诉文档中的人们您破坏了它,您购买了它。

于 2021-01-31T21:08:40.573 回答