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

时间:2013-05-21 17:33:47

标签: java unit-testing dependency-injection guice

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

根据Guice文档中的最佳做法,它说"Keep constructors as hidden as possible"。这是我非常同意的,所以我很乐意继续将我的构造函数设为私有并依赖Guice进行实例化。

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

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

1 个答案:

答案 0 :(得分:5)

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

如果未指定publicprotectedprivate,则会提供默认访问权。

从你引用的文件中:

  

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

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