2011-09-26 65 views
0

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

所以,我需要,只有必要的依赖将被绑定为每个类别的模块?

谢谢。

回答

3

创建一个吉斯模块绑定所有绑定在一个项目是不是最佳的,但也不是每个绑定创建一个模块。

一般情况下,你只是想“组相关的绑定到一个模块”。这样做有点艺术,而不是科学,所以我不能给出完美的建议。

如果你的项目有一个坚实的Java包结构,然后创建每包一个吉斯模块开始(不过,如果您的包裹中含有大量的类,你可能甚至想每包数)的好地方。使用per-package Guice模块还为您提供了让您的实现类成为包私有的好处(这对封装很有用!)。

一个具体的例子:如果你的项目有外部依赖,这是件好事,从你的应用程序代码分开约束力。例如,如果您的Web服务器与另一台服务器上的RPC服务进行通信,则最好将服务与与服务交谈的代码分开绑定(这样,您可以嘲笑外部服务而不嘲笑任何应用程序代码) 。

是一种精神寄托,你也可以使用Modules.override(...) [1],但这样做通常是一个迹象,表明你的模块是太大了。

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

正如你所说的,如果你正确地设置了你的类的访问修饰符(包私有),那么每个包都不会创建一个模块。 –

1

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

或者,更常见的是,记住,你的模块的配置方法可以install other modules,所以如果你划分这是常规操作和集成测试之间的共同到一个模块中的东西,剩下的两个不同的模块可以分别安装常见的一种。

+0

谢谢,安装方法是非常有用的! –

相关问题