使用Mockito 模擬超類中的特定方法呼叫
在測試場景中,可能需要僅模擬超類中的特定方法呼叫,而保留他人原有的行為。這可以使用 Mockito 靈活的模擬功能來實現。
考慮以下類別層次結構:
<code class="java">class BaseService { public void save() {...} } class ChildService extends BaseService { public void save() { // Custom logic super.save(); } }</code>
在此範例中,我們只想模擬ChildService 中對super.save() 的呼叫同時允許執行BaseService 中原始的save()實現。
為了實現這一點,我們可以使用間諜函數建立 ChildService 的代理:
<code class="java">ChildService classToTest = Mockito.spy(new ChildService());</code>
接下來,我們需要在 ChildService 的上下文中存根 super.save() 的行為。但是,由於 super 引用了 ChildService 中的 BaseService 類,因此在使用 Mockito.doNothing() 之前,我們需要將 classToTest 強制轉換為 BaseService。
<code class="java">Mockito.doNothing().when((BaseService)classToTest).validate();</code>
透過對 BaseService 的 validate() 方法進行存根,我們可以有效地防止它在測試期間被呼叫。因此,只有 ChildService 中的 super.save() 呼叫會被模擬攔截。
為了完成測試,我們現在可以在classToTest 上呼叫save() 並斷言ChildService 中的預期邏輯已執行:
<code class="java">classToTest.save(); verify(classToTest).load();</code>
這種方法允許我們選擇性地模擬超類中的特定方法調用,同時保留繼承方法的功能。在修改類別層次結構或重構程式碼不可行的情況下,它被證明是有價值的。
以上是如何使用 Mockito 模擬超類別中的特定方法呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器