Java FP: 伪造闭包工厂,创建域对象-Java-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝27
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:198回复:0

  Java FP: 伪造闭包工厂,创建域对象

楼主#
更多 发布于:2016-05-06 22:36


Java FP: 伪造闭包工厂,创建域对象
 最近我们想构建一个需要使用外部依赖进行计算的域对象,同时我们希望在测试的时候能够忽略这些依赖。
最开始,我们简单地在域对象中创建依赖,这使得在测试的过程中,不能随意修改依赖的值。
同样,由于外部依赖仅仅只是域对象的计算所需,并非定义域对象的可变状态,我们不应该把依赖通过构造函数传入域对象内部。
最后,我们把域对象定义成内部类,代码如下:
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 {
@Test
public 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: Faking a closure with a factory to create a domain object









优质IT资源分享社区为你提供此文。
本站有大量优质Java教程视频,资料等资源,包含java基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

java教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客