首頁  >  文章  >  Java  >  如何使用 Mockito 模擬來自超類別的方法呼叫:實用指南

如何使用 Mockito 模擬來自超類別的方法呼叫:實用指南

Linda Hamilton
Linda Hamilton原創
2024-11-01 04:42:02755瀏覽

How to Mock a Method Call from a Superclass with Mockito: A Practical Guide

克服Mockito 挑戰:模擬來自超類別的方法呼叫

Mockito 是一個Java 模擬框架,為隔離方法呼叫提供了強大的工具測試期間。然而,某些場景需要僅模擬特定的調用,特別是在處理繼承時。

考慮以下類別層次結構:

<code class="java">class BaseService {  
    public void save() {...}  
}

public Childservice extends BaseService {  
    public void save(){  
        //some code  
        super.save();
    }  
}   </code>

目標是只模擬對super.save( 的呼叫) ) 在ChildService 類別中,在第一次呼叫時保持原始方法呼叫不變。

一種方法涉及策略性地使用 Mockito 的間諜() 方法來建立 ChildService 類別的模擬。透過對在super.save() 中呼叫的BaseService 類別的validate() 方法進行存根,我們有效地防止了不必要的方法呼叫:

<code class="java">class BaseService {

    public void validate(){
        fail(" I must not be called");
    }

    public void save(){
        //Save method of super will still be called.
        validate();
    }
}

class ChildService extends BaseService{

    public void load(){}

    public void save(){
        super.save();
        load();
    }
}

@Test
public void testSave() {
    ChildService classToTest = Mockito.spy(new ChildService());

    // Prevent/stub logic in super.save()
    Mockito.doNothing().when((BaseService)classToTest).validate();

    // When
    classToTest.save();

    // Then
    verify(classToTest).load();
}</code>

這種方法有效地隔離了對super .save( ),同時允許第一次呼叫原始方法呼叫。它確保測試專門關注所審查的所需方法。

以上是如何使用 Mockito 模擬來自超類別的方法呼叫:實用指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn