首頁 > Java > java教程 > Mockito間諜:在同一類示例中嘲笑一種方法

Mockito間諜:在同一類示例中嘲笑一種方法

Robert Michael Kim
發布: 2025-03-07 18:05:45
原創
571 人瀏覽過

> 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的

方法來指定要模擬的方法的行為。 例如:

spyMockito.spy(yourObject)這將創建一個間諜對象when()。打電話給

> on
MyClass myClass = new MyClass();
MyClass myClassSpy = spy(myClass);
when(myClassSpy.internalMethod()).thenReturn(10); // Mock only internalMethod
登入後複製
>將返回10。所有其他方法都將使用其實際實現。這使得對特定方法的行為有針對性的測試與其他班級的其餘部分隔離。請記住,您必須使用

來定義要模擬的方法的行為;否則,它將稱為實際實施。 myClassSpy>internalMethod在同一類中測試方法時,使用Mockito Spies的潛在陷阱是什麼?

  • >意外副作用:由於間諜保留了原始實現,因此仍將發生未鎖定方法的任何副作用。這可能會導致測試過程中出乎意料的行為,並使其難以隔離正在測試的單元。 如果internalMethod修改對象的狀態,即使您嘲笑了其返回值。
  • >困難調試:當出乎意料的行為發生時,確定錯誤的源頭可能會很具有挑戰性。這是測試方法的問題,還是未鎖定方法的副作用?
  • 緊密耦合:
  • 不必要的複雜性:如果您可以使用簡單的模擬有效地測試方法,則不需要添加間諜的複雜性。 模擬通常更簡單,不容易出乎意料的副作用。

>在單位測試期間處理內部方法調用時,我什麼時候應該選擇一個模擬性間諜?

>

>您通常應該偏愛模擬嘲笑而不是間諜,除非您有一個有力的理由使用Spy。 選擇一個間諜時:

  • >測試相互作用:您需要測試您的測試方法及其內部方法之間的相互作用,並且內部方法具有重大的副作用或依賴性,這些副作用或依賴性易於模擬。 >>
  • formacy代碼:

有限的控制:

>您對班級的內部方法的控制有限,例如處理具有復雜依賴關係的最終方法或方法時。 >>但是,即使在這些情況下,也要仔細考慮上面提到的潛在陷阱。 如果可能的話,與依靠間諜一起解決複雜的依賴性或副作用的工作通常是更好的長期解決方案。 通常,結構良好的設計具有明確的關注點,可以使用模擬進行更簡單,更可靠的測試。

以上是Mockito間諜:在同一類示例中嘲笑一種方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板