Mockito間諜:在同一類示例中嘲笑一種方法
> Mockito間諜:在同一類示例中嘲笑一個方法
本示例演示瞭如何使用Mockito的spy
>在類中模擬特定方法。 假設我們有一個稱為MyClass
的類:
public class MyClass { public int add(int a, int b) { return a + b + internalMethod(); } private int internalMethod() { return 5; // This is the method we want to isolate } public int anotherMethod() { return 10; } }
>我們要測試add
>方法,但是我們不希望結果受internalMethod
的影響。我們可以使用間諜僅模擬internalMethod
:
import org.junit.jupiter.api.Test; import org.mockito.Mockito; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; public class MyClassTest { @Test void testAddMethod() { MyClass myClassSpy = spy(MyClass.class); when(myClassSpy.internalMethod()).thenReturn(10); // Mock the internal method int result = myClassSpy.add(2, 3); assertEquals(15, result); // 2 + 3 + 10 = 15 } }
MyClass
在此示例中,我們創建了一個when(myClassSpy.internalMethod()).thenReturn(10);
的間諜。 然後,使用internalMethod
,我們將add
存根返回10,將其行為從add
>方法的測試中隔離。然後,主張驗證了internalMethod
方法的行為是否正確,給定模擬的
。 這意味著您可以在選擇性模擬特定方法的同時保留大多數方法的實際實現。 要使用它,您可以使用spy
創建間諜。 然後,您使用Mockito的
方法來指定要模擬的方法的行為。 例如: spy
Mockito.spy(yourObject)
這將創建一個間諜對象when()
。打電話給
MyClass myClass = new MyClass(); MyClass myClassSpy = spy(myClass); when(myClassSpy.internalMethod()).thenReturn(10); // Mock only internalMethod
來定義要模擬的方法的行為;否則,它將稱為實際實施。 myClassSpy
>internalMethod
在同一類中測試方法時,使用Mockito Spies的潛在陷阱是什麼?
-
>意外副作用:由於間諜保留了原始實現,因此仍將發生未鎖定方法的任何副作用。這可能會導致測試過程中出乎意料的行為,並使其難以隔離正在測試的單元。 如果
internalMethod
修改對象的狀態,即使您嘲笑了其返回值。 - >困難調試:當出乎意料的行為發生時,確定錯誤的源頭可能會很具有挑戰性。這是測試方法的問題,還是未鎖定方法的副作用?
- 緊密耦合:
- 不必要的複雜性:如果您可以使用簡單的模擬有效地測試方法,則不需要添加間諜的複雜性。 模擬通常更簡單,不容易出乎意料的副作用。
>在單位測試期間處理內部方法調用時,我什麼時候應該選擇一個模擬性間諜?
>>您通常應該偏愛模擬嘲笑而不是間諜,除非您有一個有力的理由使用Spy。 選擇一個間諜時:
- >測試相互作用:
您需要測試您的測試方法及其內部方法之間的相互作用,並且內部方法具有重大的副作用或依賴性,這些副作用或依賴性易於模擬。 >> - formacy代碼:
有限的控制:
>您對班級的內部方法的控制有限,例如處理具有復雜依賴關係的最終方法或方法時。 >>但是,即使在這些情況下,也要仔細考慮上面提到的潛在陷阱。 如果可能的話,與依靠間諜一起解決複雜的依賴性或副作用的工作通常是更好的長期解決方案。 通常,結構良好的設計具有明確的關注點,可以使用模擬進行更簡單,更可靠的測試。以上是Mockito間諜:在同一類示例中嘲笑一種方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
