Java 注入构造函数、单元测试和最佳实践
这是一个关于在使用IoC容器时如何公开构造函数的稍微深奥的问题。我使用的是java、Guice和Junit4,但我确信这个问题更一般 根据Guice文档中的最佳实践,它说。这是我非常同意的,所以我很高兴继续让我的构造函数私有化,并依赖Guice进行实例化 然而,这带来了模拟类和单元测试的问题。如果我所有的构造函数都是私有的,那么我如何在单元测试中实例化一些东西并传递一个模拟依赖项呢?在我看来,必须为每个单元测试创建一个新的Guice模块似乎有些过分。当然,因此我必须公开这些建设者Java 注入构造函数、单元测试和最佳实践,java,unit-testing,dependency-injection,guice,Java,Unit Testing,Dependency Injection,Guice,这是一个关于在使用IoC容器时如何公开构造函数的稍微深奥的问题。我使用的是java、Guice和Junit4,但我确信这个问题更一般 根据Guice文档中的最佳实践,它说。这是我非常同意的,所以我很高兴继续让我的构造函数私有化,并依赖Guice进行实例化 然而,这带来了模拟类和单元测试的问题。如果我所有的构造函数都是私有的,那么我如何在单元测试中实例化一些东西并传递一个模拟依赖项呢?在我看来,必须为每个单元测试创建一个新的Guice模块似乎有些过分。当然,因此我必须公开这些建设者 这就引出了一个
这就引出了一个问题:考虑到DI在与单元测试相结合时非常有用,Guice文档中关于隐藏构造函数的最佳实践实际上是一个错误吗 进一步阅读同一文档,该文档建议为构造函数提供默认访问权限。然后将单元测试放在同一个包中 如果未指定
public
、protected
或private
中的任何一个,则提供默认访问
从您引用的文档中:
作为更正,只需限制实现类及其构造函数的可见性。通常,两者都首选包专用,因为这有助于:
- 绑定同一包中模块内的类
- 通过直接实例化的方式对类进行单元测试