第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用 Mockito 的 Java Mock final void 方法

使用 Mockito 的 Java Mock final void 方法

狐的傳說(shuō) 2021-09-29 15:19:52
我需要一些幫助來(lái)理解如何對(duì)以下內(nèi)容進(jìn)行單元測(cè)試。我有以下類結(jié)構(gòu)。我必須按原樣遵循結(jié)構(gòu),因?yàn)檫@是根據(jù)我們產(chǎn)品的框架,我不能偏離這一點(diǎn)。package com.rohan.baseimport javax.inject.Inject;public abstract class ServiceBase {    @Inject    protected CommandExecutorBase commandExecutor;    public final void execute() {        commandExecutor.execute(this);    }   }--------------------------------------------------------package com.rohan.servicespublic class MyService extends ServiceBase {    public void someMethod() {} }--------------------------------------------------------package com.rohan.delegatesimport javax.inject.Inject;import com.rohan.services.MyServicepublic class MyDelegate {    @Inject    MyService myService;    public void callService() {        myService.execute();    }   }我正在嘗試對(duì)編碼進(jìn)行 TDD 方法,并且我想確保callService委托類中的execute方法調(diào)用Service 類上的方法。我嘗試了以下方法,但它在執(zhí)行方法中給了我一個(gè)空指針異常(因?yàn)閏ommandExecutor對(duì)象為空)。有人可以告訴我我該怎么做嗎?我不被允許使用 PowerMockito。import org.junit.Test;import org.mockito.Mockito;public class MyDelegateUnitTests {    @Test    public void validateServiceExecuteIsCalled() {        MyDelegate delegate = new MyDelegate();        MyService serviceObject = Mockito.mock(MyService.class);        delegate.myService = serviceObject;        Mockito.doAnswer((i) -> {            System.out.println("I am here");            return null;        }).when(serviceObject).execute();        Mockito.verify(serviceObject, Mockito.times(1)).execute();    }   }我無(wú)法模擬 commandExecutor 對(duì)象,因?yàn)樗豢稍L問(wèn)(與我的 Delegate 類不同的包)。代替Mockito.doAnswer(),我也嘗試過(guò)Mockito.doNothing().when(serviceObject).execute();但我得到了同樣的例外。有人可以告訴我,當(dāng)我嘗試在when方法中定義模擬時(shí),為什么它會(huì)繼續(xù)嘗試執(zhí)行真正的方法?謝謝!
查看完整描述

2 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

作為單元測(cè)試的一部分,我認(rèn)為不需要定義myService.execute方法的行為。定義行為有點(diǎn)不必要


 Mockito.doAnswer((i) -> {

        System.out.println("I am here");

        return null;

    }).when(serviceObject).execute();

您可以刪除上面的代碼。


驗(yàn)證該execute方法被調(diào)用的次數(shù)是否正確就足夠了。要回答您的問(wèn)題,一個(gè)建議是使用基于構(gòu)造函數(shù)的注入。基本上創(chuàng)建一個(gè)構(gòu)造函數(shù)MyDelegate并注入Myservice。并在測(cè)試中,執(zhí)行以下操作:


MyService serviceObject = Mockito.mock(MyService.class);      

MyDelegate delegate = new MyDelegate(serviceObject);

如果您不想在委托類中使用基于構(gòu)造函數(shù)的注入,則其他選擇是在測(cè)試中使用@InjectMocks和@Inject。


查看完整回答
反對(duì) 回復(fù) 2021-09-29
  • 2 回答
  • 0 關(guān)注
  • 406 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)