Binding 我是否需要每个类都有一个Guice模块来编写集成测试?

Binding 我是否需要每个类都有一个Guice模块来编写集成测试?,binding,integration-testing,guice,Binding,Integration Testing,Guice,目前,我的项目中有一个Guice模块,它定义了所有绑定。 现在我想编写集成测试,需要绑定特定类的依赖项。如果使用现有模块,Guice将绑定所有依赖项。但我认为这对于集成测试是不正确的 那么,我是否需要为每个类创建一个只绑定必要依赖项的模块 谢谢。是的,您可以有多个模块,通常您需要一个不同的模块用于测试。如果您没有使用字段注入,而且工作也不太多,那么您可以让安装程序使用传递测试对象(包括mock)的构造函数来构建类 或者,更常见的是,请记住,您的模块的配置方法可以,因此,如果您将常规操作和集成测试

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

那么,我是否需要为每个类创建一个只绑定必要依赖项的模块


谢谢。

是的,您可以有多个模块,通常您需要一个不同的模块用于测试。如果您没有使用字段注入,而且工作也不太多,那么您可以让安装程序使用传递测试对象(包括mock)的构造函数来构建类


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

是的,您可以有多个模块,通常你想要一个不同的测试。如果您没有使用字段注入,而且工作也不太多,那么您可以让安装程序使用传递测试对象(包括mock)的构造函数来构建类


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

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

通常,您只需要“将相关绑定分组到模块中”。这样做是一门艺术,而不是一门科学,所以我不能给出完美的建议

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

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

作为支撑,您还可以使用
模块。重写(…)
[1],但这样做通常表明您的模块太大


  • 创建一个Guice模块来绑定项目中的所有绑定不是最优的,但每个绑定创建一个模块也不是最优的

    通常,您只需要“将相关绑定分组到模块中”。这样做是一门艺术,而不是一门科学,所以我不能给出完美的建议

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

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

    作为支撑,您还可以使用
    模块。重写(…)
    [1],但这样做通常表明您的模块太大


  • 谢谢,安装方法非常有用!谢谢,安装方法非常有用!谢谢,正如您所说,如果您正确设置了类的访问修饰符(package private),那么就没有办法为每个包创建一个模块。谢谢,正如您所说,如果您正确设置了类的访问修饰符(package private),那么就没有办法为每个包创建一个模块。