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

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

如何模擬調(diào)用同一類中存在的其他方法的方法

如何模擬調(diào)用同一類中存在的其他方法的方法

慕尼黑8549860 2023-04-26 14:49:07
我是 Mockito 的新手。我正在使用 Mockito 為一個(gè)類編寫(xiě)測(cè)試。我有一個(gè)調(diào)用同一類的其他方法的方法。我將如何嘲笑這種方法?我已經(jīng)發(fā)布了我試圖為其編寫(xiě)測(cè)試的課程。我正在嘗試模擬方法 process(PersonDTO person)public class Processor {    @Autowired    private SomeService service;    @Autowired    private SomeServiceProperties properties;    private Util util = new Util();    public SPMOutboundVO process(PersonDTO person) throws Exception {        SPMOutboundVO outboundVO = null;        if(validatePersonForBenefitsProcessing(person)) {            PersonPayrollFromWorkdayVO personPayrollFromWorkdayVO = service.getPersonPayrollFromWorkday(util.getStartOrEndDate(DayOfWeek.SUNDAY),util.getStartOrEndDate(DayOfWeek.SATURDAY),person.getEmployeeID());            if(personPayrollFromWorkdayVO != null) {                person.setBillingStartDate(getPayrollPeriod(personPayrollFromWorkdayVO));                person.setAmount(util.getMonthlyDiscountPayRate(person.getPayPeriod(),getDiscountRate(personPayrollFromWorkdayVO)));            }            if(isNewLeave(person,getPayrollPeriod(personPayrollFromWorkdayVO))) {                person.setBillingStartDate(getPayrollPeriod(personPayrollFromWorkdayVO));                outboundVO = processOutboundSPMInsertRecords(person);            } else if (person.isReturnFromLeaveOrTermed()){                person.setBillingEndDate(person.getFirstDayBackAtWorkMinus1());                outboundVO = processOutboundSPMUpdateRecords(person);            }        }        return outboundVO;    }    public boolean validatePersonForBenefitsProcessing(PersonDTO person) {        // Some code    }    public SPMOutboundVO processOutboundSPMInsertRecords(PersonDTO person) {       // Some code    }    public SPMOutboundVO processOutboundSPMUpdateRecords(PersonDTO person) {        // Some code    }    public String getPayrollPeriod(PersonPayrollFromWorkdayVO personPayrollFromWorkdayVO) {        // Some code    }    public boolean isNewLeave(PersonDTO, String) {        // Some code    }}
查看完整描述

1 回答

?
FFIVE

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

首先,從技術(shù)上講,您可以使用 mockito 從類中模擬選定的方法。此功能稱為部分模擬。

第二:在某些情況下,在測(cè)試一個(gè)類以模擬來(lái)自同一類的其他方法時(shí)是有意義的。一個(gè)很好的例子是將與其他組件的交互捆綁在一起的方法(為了舉例起見(jiàn),我們稱它為do_interactions),這樣該類的其余方法就沒(méi)有此類交互,并且僅為do_interactions該目的調(diào)用。更具體地說(shuō),考慮一種為其他方法傳遞文件內(nèi)容的方法:它將與操作系統(tǒng)的交互(如打開(kāi)和閱讀)捆綁在一起,并只返回內(nèi)容。然后,您可以通過(guò)模擬該函數(shù)使其在測(cè)試需要時(shí)返回“模擬”文件內(nèi)容,從而輕松地執(zhí)行與操作系統(tǒng)隔離的測(cè)試。

也就是說(shuō),有些例子表明這種嘲笑是有道理的,但這不一定適用于您的情況。

第三,測(cè)試是關(guān)于發(fā)現(xiàn)錯(cuò)誤(參見(jiàn) Myers、Badgett、Sandler:軟件測(cè)試的藝術(shù),或 Beizer:軟件測(cè)試技術(shù)等),單元測(cè)試旨在發(fā)現(xiàn)那些可以在孤立代碼中找到的錯(cuò)誤.?為了有效地發(fā)現(xiàn)錯(cuò)誤,您必須進(jìn)行特定于實(shí)現(xiàn)的測(cè)試:錯(cuò)誤在實(shí)現(xiàn)中,不同的實(shí)現(xiàn)有不同的錯(cuò)誤。想一想大量的排序算法:它們都有相同的 API,但它們的實(shí)現(xiàn)卻完全不同?;蛘撸紤]實(shí)現(xiàn) Fibonacci 函數(shù)的方法:作為迭代或遞歸函數(shù),作為封閉形式的表達(dá)式 (Moivre/Binet),或作為查找表。同樣,界面始終相同,可能的錯(cuò)誤差異很大,單元測(cè)試策略也是如此。和,單元測(cè)試是最接近實(shí)現(xiàn)級(jí)別的測(cè)試級(jí)別——集成測(cè)試、子系統(tǒng)測(cè)試和系統(tǒng)測(cè)試都在上升,因此不太適合在實(shí)現(xiàn)中查找錯(cuò)誤。因此,嘗試在單元測(cè)試中保持與實(shí)現(xiàn)無(wú)關(guān)可能會(huì)導(dǎo)致測(cè)試套件效率降低。

也就是說(shuō),您確實(shí)也應(yīng)該努力降低測(cè)試維護(hù)工作量。這意味著,如果特定測(cè)試不需要特定的測(cè)試用例實(shí)現(xiàn),則不要將其具體化。并且,對(duì)于那些有充分理由是特定于實(shí)現(xiàn)的測(cè)試,仍然盡量保持較低的維護(hù)工作量,例如通過(guò)在輔助方法中提取測(cè)試的特定于實(shí)現(xiàn)的部分,以減少您必須維護(hù)的測(cè)試代碼量,以防萬(wàn)一SUT 的更改。

查看完整回答
反對(duì) 回復(fù) 2023-04-26
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報(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)