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