Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注入构造函数、单元测试和最佳实践_Java_Unit Testing_Dependency Injection_Guice - Fatal编程技术网

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

Java 注入构造函数、单元测试和最佳实践,java,unit-testing,dependency-injection,guice,Java,Unit Testing,Dependency Injection,Guice,这是一个关于在使用IoC容器时如何公开构造函数的稍微深奥的问题。我使用的是java、Guice和Junit4,但我确信这个问题更一般 根据Guice文档中的最佳实践,它说。这是我非常同意的,所以我很高兴继续让我的构造函数私有化,并依赖Guice进行实例化 然而,这带来了模拟类和单元测试的问题。如果我所有的构造函数都是私有的,那么我如何在单元测试中实例化一些东西并传递一个模拟依赖项呢?在我看来,必须为每个单元测试创建一个新的Guice模块似乎有些过分。当然,因此我必须公开这些建设者 这就引出了一个

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

根据Guice文档中的最佳实践,它说。这是我非常同意的,所以我很高兴继续让我的构造函数私有化,并依赖Guice进行实例化

然而,这带来了模拟类和单元测试的问题。如果我所有的构造函数都是私有的,那么我如何在单元测试中实例化一些东西并传递一个模拟依赖项呢?在我看来,必须为每个单元测试创建一个新的Guice模块似乎有些过分。当然,因此我必须公开这些建设者


这就引出了一个问题:考虑到DI在与单元测试相结合时非常有用,Guice文档中关于隐藏构造函数的最佳实践实际上是一个错误吗

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

如果未指定
public
protected
private
中的任何一个,则提供默认访问

从您引用的文档中:

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

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