我是否需要为每个类编写Guice模块来编写集成测试?

时间:2011-09-26 13:59:46

标签: binding integration-testing guice

目前我的项目中有1个Guice模块,它定义了所有绑定。 现在我想编写集成测试,我需要绑定特定类的依赖项。如果我使用现有模块,Guice将绑定所有依赖项。但我认为这对于集成测试来说是不正确的。

那么,对于每个只需要绑定必要依赖项的类,我是否需要一个模块?

感谢。

2 个答案:

答案 0 :(得分:3)

创建一个Guice模块来绑定项目中的所有绑定并不是最佳选择,但是每个绑定都不创建一个模块。

通常,您只想“将相关绑定分组到模块中”。这样做有点像艺术,而不是科学,所以我无法给出完美的建议。

如果您的项目具有可靠的Java包结构,那么每个包创建一个Guice模块是一个很好的起点(但是,如果您的包包含许多类,您甚至可能需要每个包几个)。使用每个包Guice模块还可以让您使您的实现类成为包私有(这对封装很有用!)。

一个具体的例子:如果你的项目有外部依赖关系,那么将它们与你的应用程序代码分开绑定可能是件好事。例如,如果您有一个与另一台服务器上的RPC服务通信的Web服务器,最好将该服务与与该服务通信的代码分开绑定(这样,您可以模拟外部服务而不模拟任何应用程序代码)

作为拐杖,您也可以使用Modules.override(...) [1],但这样做通常表明您的模块太大了。

  1. http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/util/Modules.html

答案 1 :(得分:1)

是的,您可以拥有多个模块,通常您需要一个不同的模块用于测试。如果你没有使用字段注入并且它没有太多工作,你可以让你的设置构建带有构造函数的类,这些构造函数传递测试对象,包括模拟。

或者,更常见的是,请记住模块的配置方法可以install other modules,因此如果将常规操作和集成测试之间常见的内容划分为一个模块,剩下的两个不同的模块可以分别安装常见的一个。