用Mockito回答

在編寫單元測試時 ,必須牢記不要依賴外部組件。 為了避免這種情況,我們使用了模擬框架,對我來說,最容易使用的是Mockito
在本文中,我們將看到在Mockito中使用的一種“高級”技術,可以使用Answer接口在模擬方法上返回相同的參數實例。

假設我們正在為管理PersonJob類的類編寫單元測試,并且在操作中它使用DAO類在Person和Job之間插入關系類(M:N)稱為PersonJob
例如,正在測試的類如下所示:

public PersonJob createPersonJob(Person person, Job job) {..  some job .. PersonJob personJob = new PersonJob(person, job);return  this.personJobDao.create(personJob);}

因此,在這種情況下,您似乎需要嘲笑personJobDao
讓我們創建模擬并記錄交互:

public class WhenAJobIsAssignedToPerson {@Testpublic void relationship_should_be_made_persistent() {PersonJobDao personJobDao = mock(PersonJobDao.class);when(personJobDao.create(any(PersonJob.class))).thenReturn(???)PersonJobManager personJobManager = new PersonJobManager();personJobManager.setPersonJobDao(personJobDao);Person person = new Person();Job job = new Job();PersonJob personJob = personJobManager.createPersonJob(person, job);assertThat(personJob.getPerson(), is(person));assertThat(personJob.getJob(), is(job));}}

是的,您可以看到您不知道要返回什么,因為實例是由被測類創建的,并且在測試方法中,您也不知道哪個實例是由createPersonJob方法創建的。 要解決此問題,您需要使用thenAnswer而不是thenReturn方法:

public class WhenAJobIsAssignedToPerson {@Testpublic void relationship_should_be_made_persistent() {PersonJobDao personJobDao = mock(PersonJobDao.class);when(personJobDao.create(any(PersonJob.class))).thenAnswer(new Answer<PersonJob>() {public PersonJob answer(InvocationOnMock invocation)throws Throwable {return (PersonJob) invocation.getArguments()[0];}});PersonJobManager personJobManager = new PersonJobManager();personJobManager.setPersonJobDao(personJobDao);Person person = new Person();Job job = new Job();PersonJob personJob = personJobManager.createPersonJob(person, job);assertThat(personJob.getPerson(), is(person));assertThat(personJob.getJob(), is(job));}}

需要注意的是回答接口需要您實現答案的方法,這在我們的情況下,簡單地返回personJobDao的第一個參數(PersonJob實例)。 創建方法。

現在,我們可以安心編寫斷言,而不必擔心返回的實例。

參考:在One Jar To Rule Them All博客中與 JCG合作伙伴 Alex Soto的Mockito進行回答 。


翻譯自: https://www.javacodegeeks.com/2012/07/answering-with-mockito.html

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

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

相關文章

java三板斧_Java 枚舉使用三板斧

Java 枚舉使用三板斧1 定義public enum CountryEnums {ONE(1,"韓"),TWO(2,"魏"),THREE(3,"楚"),FOUR(4,"燕"),FIVE(5,"趙"),SIX(6,"齊");private Integer retCode;private String retMsg;// 枚舉的構造方法是 pri…

假裝這些是MyEclipse的快捷鍵(1)

Java快捷鍵 Alt / 代碼自動補全Alt Shift S 功能菜單 Ctrl 1 代碼自動修正Ctrl / 單行注釋/取消Ctrl O 查看類的所有方法Ctrl T 查看類的集成架構圖Ctrl Shift / 多行注釋Ctrl Shift \ 取消多行注釋Ctrl Shift F 代碼格式化轉載于:https://www.cnblogs.com/swordt…

JasperReports JSF插件用例–簡單列表報告

這是JasperReports JSF插件系列的第一篇“用例文章” &#xff0c;我將專注于一個簡單的需求&#xff0c;并且我將進一步深入。 起點是我們已經為圖書商店完成的項目設置&#xff0c;我將向其中添加一個列表&#xff0c;其中包含在數據庫中注冊的其他圖書&#xff0c;該列表也將…

2016.10.17先占坑

2016.10.17先占坑轉載于:https://www.cnblogs.com/amurzet/p/5978986.html

ER圖流程圖

ER圖&#xff1a;ER圖分為實體、屬性、關系三個核心部分。實體是長方形體現&#xff0c;而屬性則是橢圓形&#xff0c;關系為菱形。 圖書館管理系統流程圖&#xff08;圖片源于網上&#xff09;&#xff1a;對于程序員來說&#xff0c;我們要知道&#xff1a;整個系統中&#x…

php源碼仿三一重工,織夢仿三一重工業大學氣企業網站php源碼

★模板引薦★源碼稱呼&#xff1a;仿三一重工業大學氣企業網站php源碼仿三一重工業大學氣企業網站php源碼&#xff0c;嘗試完備無錯&#xff0c;兼容合流欣賞器。模板包括安置證明&#xff0c;并包括嘗試數據。本模板鑒于DEDECms 5.7 GBK安排&#xff0c;須要 UTF-8版本的請本人…

接觸Jenkins(Hudson)API,第2部分

這篇文章從本教程的第1部分繼續。 已經快一年了&#xff0c;但是我終于有時間重新審視我為與Jenkins api交互而編寫的一些代碼。 我已經使用了部分工作來幫助管理許多Jenkins構建服務器&#xff0c;主要是保持插件同步以及將作業從一臺機器移動到另一臺機器。 在本文中&#xf…

php樹莓派魔鏡,用樹莓派和顯示器制作一面“魔鏡”

所需要的材料一臺顯示器一塊和顯示器大小相同的雙面鏡一些2*4米的細木條樹莓派機器必要組件(電源、HDMI線、usb無線網卡、鍵盤)木工工具(鋸子、磨砂機、螺絲刀)螺絲、液態釘子選一個合適的顯示器鏡子的大小完全由顯示器的類型和大小決定&#xff0c;所以我希望得到一個盡量大的…

【數字圖像處理】[3]--直方圖規范化

【數字圖像處理】[3]--直方圖規范化直方圖規范化出現的原因是因為直方圖均衡只能產生出固定的圖像&#xff0c;不滿足于需求&#xff0c;有時我們需要讓直方圖變成特定的直方圖&#xff0c;于是有了直方圖規范化原理&#xff1a;可能只看公式沒什么感覺&#xff0c;我們來舉一個…

JavaFX 2.0布局窗格– GridPane

毫無疑問&#xff0c; GridPane是JavaFX 2.0中功能最強大&#xff0c;最靈活的布局窗格。 它在由行和列組成的靈活網格中布置其子項&#xff0c;與Swing的GridBagLayout或HTML的表格模型非常相似。 這種方法使該窗格非常適合于任何形式的表單&#xff08;例如網站上的聯系表單&…

leecode 題解 || Merge k Sorted Lists 問題

problem&#xff1a; Merge k sorted linked lists and return it as one sorted list.Analyze and describe its complexity.Tags Divide and Conquer Linked List Heap合并K個已序單鏈表 thinking&#xff1a; &#xff08;1&#xff09;題目沒有要求不能夠新開ListNode,所以…

PHP在瀏覽器中被拒絕請求,php控制請求頁面瀏覽器緩

緩存的主要作用是防止用戶頻繁刷新網站頁面&#xff0c;導致服務器數據庫負擔&#xff0c;既要保證信息更新的及時性&#xff0c;也要保證緩存能被充分利用。http協議里控制瀏覽器緩存的頭有三個Cache-Control&#xff0c;Expires&#xff0c;Last-Modified&#xff0c;在PHP下…

js -03課 -03 js中的真假判斷

真假的問題&#xff1a;數據類型-數字&#xff08;NaN&#xff09;、字符串、布爾、函數、對象&#xff08;elem、[]、{}、null&#xff09;、未定義真&#xff1a;非0的數字、非空字符串、true、函數、能找到的元素、[]、{}假&#xff1a;0、NaN、空字符串、false、不能找到的…

HBASE啟動失敗,Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster

Master日志錯誤&#xff1a;2015-12-02 06:34:32,394 ERROR [main] master.HMasterCommandLine: Master exitingjava.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMasterat org.apache.hadoop.hbase.master.HMaster.constru…

Java線程:我應該創建幾個

介紹 “我應該創建多少個線程&#xff1f;”。 許多年前&#xff0c;我的一個朋友問我這個問題&#xff0c;然后我按照“ CPU核心數 1”的指示給了他答案。 當您在這里閱讀時&#xff0c;大多數人都在點頭。 不幸的是&#xff0c;我們所有人當時都錯了。 現在&#xff0c;如果您…

java ui自動化測試腳本,如何用Airtest編寫UI自動化腳本(示例代碼)

前言游戲并不像app一樣直接把渲染樹節點暴露出來&#xff0c;這就造成游戲UI自動化在元素定位上的不方便性&#xff0c;不過依賴airtest的圖片識別&#xff0c;我們可以直接跳過元素檢查&#xff0c;以圖片對比的形式進行自動化&#xff0c;雖然效率可能會低一些&#xff0c;但…

Spring JDBC數據庫連接池設置

對于任何Java應用程序而言&#xff0c; 在Spring框架中設置JDBC數據庫連接池都是很容易的&#xff0c;僅需更改spring配置文件中的一些配置即可。使用Apache Commons DBCP和Commons Pool以及Spring框架的連接池是不錯的選擇&#xff0c;但是如果您擁有Web服務器和托管的J2EE容器…

BZOJ 3505 [Cqoi2014]數三角形(組合數學)

【題目鏈接】 http://www.lydsy.com/JudgeOnline/problem.php?id3505 【題目大意】 給定一個nxm的網格&#xff0c;請計算三點都在格點上的三角形共有多少個。   注意三角形的三點不能共線。 【題解】 我們計算三個點組合的情況&#xff0c;去除橫豎三共線&#xff0c;以及斜…

matlab多項式加法運算,matlab多項式運算與代數方程求解解析.ppt

* 多項式運算與代數方程求解 數學軟件 Matlab Matlab基礎及應用 * 多項式轉化為符號表達式&#xff1a;poly2sym 四則運算&#xff1a;conv、deconv 導數與積分&#xff1a;ployder、polyint 求值與零點&#xff1a;polyval、polyvalm、roots、poly 多項式運算 主要內容 代數方…

java.lang.NoClassDefFoundError:如何解決–第3部分

本文是我們的NoClassDefFoundError故障排除系列的第3部分。 正如我在第一篇文章中提到的那樣&#xff0c;有許多可能導致NoClassDefFoundError的問題。 本文將重點介紹該問題的最常見原因之一&#xff1a;Java類靜態初始化程序塊或變量的失敗。 將提供一個示例Java程序&#xf…