克服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中文網其他相關文章!