博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java FP: 伪造闭包工厂,创建域对象
阅读量:7252 次
发布时间:2019-06-29

本文共 1072 字,大约阅读时间需要 3 分钟。

最近我们想构建一个需要使用外部依赖进行计算的域对象,同时我们希望在测试的时候能够忽略这些依赖。

最开始,我们简单地在域对象中创建依赖,这使得在测试的过程中,不能随意修改依赖的值。

同样,由于外部依赖仅仅只是域对象的计算所需,并非定义域对象的可变状态,我们不应该把依赖通过构造函数传入域对象内部。

最后,我们把域对象定义成内部类,代码如下:

01 public class FooFactory {
02     private final RandomService randomService;
03  
04     public FooFactory(RandomService randomService) {
05         this.randomService = randomService;
06     }
07  
08     public Foo createFoo(String bar, int baz) {
09         return new Foo(bar, baz);
10     }
11  
12     class Foo {
13         private String bar;
14         private int baz;
15  
16         public Foo(String bar, int baz) {
17             this.bar = bar;
18             this.baz = baz;
19         }
20  
21         public int awesomeStuff() {
22             int random = randomService.random(bar, baz);
23             return random * 3;
24         }
25     }
26 }

测试这段代码的测试用例如下:

01 public class FooFactoryTest {
02  
03     @Test
04     public void createsAFoo() {
05         RandomService randomService = mock(RandomService.class);
06         when(randomService.random("bar"12)).thenReturn(13);
07         FooFactory.Foo foo = new FooFactory(randomService).createFoo("bar"12);
08         assertThat(foo.awesomeStuff(), equalTo(39));
09     }
10  
11 }

代码看似冗余,却合理地解决了测试与外部依赖的解耦问题。

参考文献

  • 转载自 
你可能感兴趣的文章
[51nod1222] 最小公倍数计数(莫比乌斯反演)
查看>>
LeetCode - 37. Sudoku Solver
查看>>
公钥,私钥和数字签名这样最好理解
查看>>
SqlBulkCopy 类
查看>>
Java知多少(104)网络编程之统一资源定位符URL
查看>>
csu1811(树上启发式合并)
查看>>
spring 整合maven 定时任务调度,多个任务写法
查看>>
New Concept English Two 15 37
查看>>
L125
查看>>
poj2192
查看>>
json的内容回顾
查看>>
SAP将内表生成XML作为excel保存到FTP
查看>>
栅格系统
查看>>
[Selenium] 使用自定义的FirefoxProfile
查看>>
Spine批量导出Command line Export
查看>>
POJ3690:Constellations——题解
查看>>
第二次毕业设计任务书
查看>>
sts安装出现could not find jar:file解决办法
查看>>
Maven中POM.XML详解
查看>>
小时候,长大了
查看>>