Java:伪造工厂的闭包以创建域对象
生活随笔
收集整理的這篇文章主要介紹了
Java:伪造工厂的闭包以创建域对象
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近,我們想要?jiǎng)?chuàng)建一個(gè)域?qū)ο?#xff0c;該對(duì)象需要具有外部依賴(lài)關(guān)系才能進(jìn)行計(jì)算,并且希望能夠在測(cè)試中解決該依賴(lài)關(guān)系。
最初,我們只是在領(lǐng)域類(lèi)中新建依賴(lài)項(xiàng),但這使得無(wú)法在測(cè)試中控制其值。
同樣,我們似乎不應(yīng)該將這種依賴(lài)關(guān)系傳遞到域?qū)ο蟮臉?gòu)造函數(shù)中,因?yàn)樗皇嵌x對(duì)象的狀態(tài),而只是定義對(duì)象使用的狀態(tài)。
我們最終得到了類(lèi)似于以下代碼的內(nèi)容,其中將域?qū)ο笞鳛閮?nèi)部類(lèi):
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;}} }然后,對(duì)該代碼的測(cè)試可能如下所示:
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));} }解決該問(wèn)題的方法有點(diǎn)冗長(zhǎng),但似乎工作得很好。
參考: Java:偽造工廠的閉包以從我們的JCG合作伙伴 創(chuàng)建域?qū)ο?? Mark Needham博客上的 Markh Needham。
翻譯自: https://www.javacodegeeks.com/2012/03/java-faking-closure-with-factory-to.html
總結(jié)
以上是生活随笔為你收集整理的Java:伪造工厂的闭包以创建域对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java中使用Map and Fold进
- 下一篇: 清除wps的控件(删除WPS里面的插件)