2

这是一个稍微深奥的问题,关于在使用 IoC 容器时如何公开构造函数。我正在使用 java、Guice 和 Junit4,但我确信这个问题更笼统。

在 Guice 文档中的 Best Practices 下,它说"Keep constructors as hidden as possible"。这是我非常同意的一点,所以我很高兴继续将我的构造函数设为私有并依赖 Guice 进行实例化。

然而,这带来了模拟类和单元测试的问题。如果我所有的构造函数都是私有的,那么我如何在单元测试中实例化一些东西并传递一个模拟的依赖项?必须为每个单元测试创​​建一个新的 Guice 模块对我来说似乎有点矫枉过正。当然,因此我必须将这些构造函数公之于众。

这让我想到了一个问题:鉴于 DI 在与单元测试结合使用时非常有用,Guice 文档中关于保持构造函数隐藏的最佳实践实际上是一个错误吗?

4

1 回答 1

5

在同一个文档中进一步阅读,该文档建议为构造函数提供默认访问权限。然后将您的单元测试放在同一个包中。

如果未指定或public,则提供默认访问权限。protectedprivate

从您引用的文档中:

作为更正,只需限制实现类及其构造函数的可见性。通常,两者都首选私有包,因为这有助于:

  • 将类绑定到同一个包中的模块中
  • 通过直接实例化的方式对类进行单元测试
于 2013-05-21T17:39:02.643 回答