注入构造函数,单元测试和最佳实践

sal*_*dog 2 java unit-testing dependency-injection guice

这是一个有点深奥的问题,关于在使用IoC容器时如何公开构造构造函数.我正在使用java,Guice和Junit4,但我确信这个问题更为通用.

根据Guice文档中的最佳实践,它说"尽可能隐藏构造函数".这是我非常同意的,所以我很乐意继续将我的构造函数设为私有并依赖Guice进行实例化.

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

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

And*_*mas 5

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

如果没有或未指定public,则提供默认访问.protectedprivate

从您引用的文档:

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

  • 将模块中的类绑定在同一个包中
  • 通过直接实例化对单元进行单元测试