最近,我们想要创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系。

最初,我们只是在领域类中新建依赖项,但这使得无法在测试中控制其值。

同样,我们似乎不应该将这种依赖关系传递到域对象的构造函数中,因为它不是定义对象的状态,而只是定义对象使用的状态。

我们最终得到了类似于以下代码的内容,其中将域对象作为内部类:

public class FooFactory {private final RandomService randomService;public FooFactory(RandomService randomService) {this.randomService = randomService;}public Foo createFoo(String bar, int baz) {return new Foo(bar, baz);}class Foo {private String bar;private int baz;public Foo(String bar, int baz) {this.bar = bar;this.baz = baz;}public int awesomeStuff() {int random = randomService.random(bar, baz);return random * 3;}}
}

然后,对该代码的测试可能如下所示:

public class FooFactoryTest {@Testpublic void createsAFoo() {RandomService randomService = mock(RandomService.class);when(randomService.random("bar", 12)).thenReturn(13);FooFactory.Foo foo = new FooFactory(randomService).createFoo("bar", 12);assertThat(foo.awesomeStuff(), equalTo(39));}
}

解决该问题的方法有点冗长,但似乎工作得很好。

参考: Java:伪造工厂的闭包以从我们的JCG合作伙伴 创建域对象   Mark Needham博客上的 Markh Needham。

翻译自: https://www.javacodegeeks.com/2012/03/java-faking-closure-with-factory-to.html

Java:伪造工厂的闭包以创建域对象相关推荐

  1. js 闭包作用域和作用域链_Java:伪造工厂的闭包以创建域对象

    js 闭包作用域和作用域链 最近,我们想创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系. 最初,我们只是在领域类中引入依赖关系,但这使得无法在测试中控制其值 ...

  2. java创建对象后花括号_java – 创建数组对象和使用花括号分配数组有什么区别?...

    在Java中,我在网上发现了一些教程,当涉及到数组时,它们的教学方式不同 例1: 使用"new"关键字创建数组对象,然后为其指定值. int[] values; values = ...

  3. java 调用父类的变量_java创建子类对象设置并调用父类的变量操作

    通过子类调用父类的变量,有两种方法: 1.把父类的变量设置成public: package triangle.opengl.wlz.stu.childusefathervariable; import ...

  4. Java设计模式-工厂方法模式的使用和介绍

    一.工厂方法模式简介 1.定义 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorph ...

  5. java简单工厂模式实例造车,JAVA设计模式学习5——工厂方法模式

    工厂方法模式(Factory Method)又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性.我们前一节中提到当产品结构变 ...

  6. JavaScript实现创建自定义对象的常用方式总结

    2019独角兽企业重金招聘Python工程师标准>>> 1. 对象字面量方式 对象字面量方式是创建自定义对象的首选模式,简单方便. var per = { name:'zhangsa ...

  7. 【Java设计模式 设计模式与范式】创建型模式 四:抽象工厂模式

    本篇Blog继续学习创建型模式,创建型模式的主要关注点是怎样创建对象,它的主要特点是将对象的创建与使用分离,这样可以降低系统的耦合度,使用者不需要关注对象的创建细节.本篇学习的是抽象工厂模式.由于学习 ...

  8. java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现

    工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...

  9. Java 静态工厂方法详解

    Java 静态工厂方法详解 本文章主要是对<Effective Java>对静态工厂方法的理解 第一次使用静态工厂方法是在HIT<Software Construction>课 ...

最新文章

  1. 处理器嵌入室内校正数字音频平台
  2. 中国电子学会图形化四级编程题:食堂取餐
  3. Django-View中绕过RSCF验证
  4. 《几何与代数导引》例2.6
  5. PHP的 preg_match_all
  6. python内存管理和释放_《python解释器源码剖析》第17章--python的内存管理与垃圾回收...
  7. 基于PYNQ-Z2重建BNN工程
  8. 使用迁移学习和TensorFlow.js在浏览器中进行AI情感检测
  9. location定位_javascript自学记录:location对象
  10. 报表制作1(传入对象和其他参数)
  11. 俄罗斯方块c语言代码及注释,俄罗斯方块C语言代码
  12. 计算机应用类,计算机应用领域分为几大类
  13. 150. Evaluate Reverse Polish Notation逆波兰表达式
  14. java工具类 文件zip压缩 base64 加密,base64解密 zip解压
  15. 关于OLAP数据仓库的归纳总结
  16. SayAsYouWish:Fine-grained Control of Image Caption Generation with Abstract Scene Graphs ---- 论文阅读笔记
  17. 会计分录、科目、账户
  18. php编程好学不,PHP编程一般学哪些内容 PHP编程好学吗
  19. 2021年编程列入高考_什么是2021年最佳的后端编程语言?
  20. 从设计入门到腰椎间盘突出 - 分析用户体验设计中的规律与逻辑

热门文章

  1. 如何实现下拉框的绑定
  2. 从事java编程技能要求_5道Java视频课程,提高您的编程技能
  3. jwt令牌_JWT –生成和验证令牌–示例
  4. java代码初体验_第一次Java 8体验
  5. 为什么在生产中进行硒自动化测试对于您的下一个版本至关重要?
  6. java 面试指南_Java面试参考指南–第1部分
  7. JDK 8 BigInteger精确缩小转换方法
  8. Oracle ADF和Oracle Jet一起工作。 建筑模式
  9. 同步器 java_您可能不知道的五个高级Java同步器
  10. JDK 9已完成功能!