Java:偽造工廠的閉包以創建域對象

最近,我們想要創建一個域對象,該對象需要具有外部依賴關系才能進行計算,并且希望能夠在測試中解決該依賴關系。

最初,我們只是在領域類中新建依賴項,但這使得無法在測試中控制其值。

同樣,我們似乎不應該將這種依賴關系傳遞到域對象的構造函數中,因為它不是定義對象的狀態,而只是定義對象使用的狀態。

我們最終得到了類似于以下代碼的內容,其中將域對象作為內部類:

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373561.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373561.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373561.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用scp 遠程上傳下載文件/文件夾

利用scp傳輸文件 1、從服務器下載文件 scp usernameservername:/path/filename /tmp/local_destination 例如scp codinglog192.168.0.101:/home/kimi/test.txt 把192.168.0.101上的/home/kimi/test.txt 的文件下載到 /tmp/local_destination 2、上傳本地文件到服務器 scp /…

KEIL編譯錯誤總結:

1 expected an identifier:#define宏定義常量后,如果再用前面定義的常量作為枚舉常量就會報錯,方法,去掉#define宏定義 2 ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL 定義的變量和外部聲明調用的變量存儲類型不一致&#…

視覺平衡與物理平衡_設計中的平衡理論為什么這么重要?

原標題:設計中的平衡理論為什么這么重要?在平面設計中很重要的理論就是關于平衡的應用。無論在logo設計還是網頁設計還是海報設計中,一個好的設計一定會兼顧視覺的平衡。今天123標志網就跟大家一起看看平衡的力量。構圖平衡主要意味著調整設計…

Tomcat、JDK 歷史版本下載地址

Tomcat 歷史版本下載地址http://archive.apache.org/dist/tomcat/ JDK 歷史版本下載地址 https://www.oracle.com/technetwork/java/javase/archive-139210.html 個人博客:學習園 原文地址:http://www.xuexiyuan.cn/article/detail/190.html

JavaFX移動應用程序最佳實踐,第2部分

警告:我在這里給出的技巧對于JavaFX Mobile的當前版本是正確的,該版本是JavaFX 1.1 SDK的一部分。 在將來的版本中,行為將改變,上述工件的當前不良性能將被優化或至少得到顯著改善。 我在這里寫的所有內容都是快照,不應…

14軟件工程第一次作業

你認為一些軍事方面的軟件系統采用什么樣的開發模型比較合適? 我認為設計軍事方面的軟件采用螺旋式的開發模型比較好。因為螺旋模型減少了過多測試或者是測試不足所帶來的風險,能夠使軟件在無法排除重大風險時有機會停止,減少損失。對于軍事方…

波紋擴散_C4D_動畫amp;RS波紋擴散效果J_014

C4D-效果擴散效果,Redshift混合冰材質;利用頂點貼圖擴散效果制作,RS混合調用頂點貼圖。視頻教程時長22分鐘。對象為可編輯對象才能用頂點貼圖。冰結域的擴展是這個動畫的重點,在這個模式下,權重會根據半徑向外擴展&…

軟件測試工程師簡歷項目經驗怎么寫?--9999個已成功入職的軟件測試工程師真實簡歷

簡歷是我們求職的第一步,也是非常重要的一步。 青云叔叔看過太多簡歷,最快3秒就淘汰一份簡歷,因為其實我們每天要收到很多簡歷進行篩選,那么面試官其實也是會很快進行對簡歷進行判斷的,如果你對簡歷寫的一塌糊涂&…

【poj2464】樹狀數組

這道題。。太特么多細節了。。 題意:在平面直角坐標系中給你N個點,stan和ollie玩一個游戲,首先stan在豎直方向上畫一條直線,該直線必須要過其中的某個點,然后ollie在水平方向上畫一條直線,該直線的要求是要…

mkdir -p命令

如果要創建目錄A并創建目錄A的子目錄B,沒有用-p的情況下mkdir 逐個的創建目錄(mkdir A && mkdir A/B); 如果用-p 可以直接創建2個目錄 mkdir -p A/B(如果父目錄A不存在就創建); 來自個人博客: http://www.xuexiyuan.cn/article/detail/182.html

Eclipse在過去十年中的主要成就

正如我所寫的那樣 ,Eclipse在11月慶祝了10年來的開源和社區。 Eclipse社區已經形成了許多里程碑 ,但是主要成就是什么? Eclipse為實際改變軟件行業做了什么? 這是Eclipse的一些關鍵成就。 1.主導的Java IDE。 Eclipse最初是一個非…

azure git怎么使用_Azure(一)Azure Traffic Manager為我們的Web項目提供負載均衡

一,引言上一篇講到我們將自己的Net Core Web 項目部署到 Azure 的 Web App 的一項 pass 服務,假如隨著項目的日益增長的訪問量,之前部署到單節點的應用可能無法保證其穩定性,可能會導致系統宕機等等問題,這個時候&…

hiho1257 Snake Carpet

題目鏈接:http://hihocoder.com/problemset/problem/1257 題目大意:有n條蛇 編號為1-n 每條蛇的長度跟編號相等 奇數編號的蛇必須拐奇數次(除了第一條)偶數編號的蛇必須拐偶數次(除了第二條)問能不能在這種…

POJ 3680_Intervals

題意: 給定區間和該區間對應的權值,挑選一些區間,求使得每個數都不被K個區間覆蓋的最大權值和。 分析: 如果K1,即為區間圖的最大權獨立集問題。可以對區間所有端點排序后利用動態規劃的方法,設dp[i]為只考慮…

MongoDB 數據類型查詢——$type使用

在MongoDB中根據字段的數量類型來查詢數據使用$type操作符來實現,具體使用法語:1db.集合名.find({$type:類型值}) //這里的類型值能使用Number也能使用alias舉個例子:12db.person.find({address:{$type:2}}) //查詢address字段數據…

Spring和JSF集成:MVC螺母和螺栓

過去,我曾嘗試將JSF與Spring MVC集成在一起,盡管我的第一次嘗試成功了,但這遠非理想。 這次,我決定做出一些關鍵決定來幫助我集中精力: 向后兼容。 支持JSF 1.2涉及的工作太多,而Spring 3.1中出現了太多的好…

文字描邊_如何在網頁里實現文字描邊效果

文字描邊想要在網頁里實現文本描邊效果,在以前只能使用Photoshop等來實現,但現在只需要一個text-stroke屬性,即可輕松做到文本描邊,漸變文本描邊,甚至圖片文本描邊。01語法text-stroke: text-stroke是一個復合屬性&…

javascript數據結構-棧

github博客地址 棧(stack)又名堆棧,它是一種運算受限的線性表。遵循后進先出原則,像垃圾桶似的。功能實現依然按照增刪改查來進行,內部數據存儲可以借用語言原生支持的數組。 棧類 function Stack(){this.data []; }添…

MongoDB 字符串值長度條件查詢

在實際項目中常常會有根據字段值長度大小進行限制查詢,例如查詢商品名稱過長或過短的商品信息,具體的實現方式可能有多種,在此記錄常見的兩種實現使用 $where 查詢(性能稍遜一些)12345//查詢商品名稱長度大于25個字符的…

虛擬化Java應用程序:最佳實踐(JavaOne 2011)

賈斯汀穆雷(Justin Murray)早五分鐘就開始了他的演講[“虛擬化Java應用程序:最佳實踐”(21860)],并說虛擬化已經到了人們不再需要擔心利用虛擬化的地步。 他說他的演講大約有一年的歷史,是一個團…