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

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

mocktio 驗(yàn)證參數(shù)順序

mocktio 驗(yàn)證參數(shù)順序

回首憶惘然 2021-11-11 16:09:29
我一直在尋找這個(gè)一段時(shí)間沒(méi)有答案。假設(shè)我有一個(gè)使用Calc依賴(lài)項(xiàng)的服務(wù)類(lèi)Calc有一個(gè)方法除法public void divide(int a,int b)和服務(wù)像這樣使用它public void serviceAMethod{//do somehtinga=getA();b=getB();calc.divide(a,b);}我的測(cè)試看起來(lái)像這樣@Testpublic void serviceAMethod_callsCalc(){   verify(calcMock).divide(a, b);}這通過(guò)了,但是如果我去Calc.divide并將簽名更改為public void divide(int b,int a)它仍然通過(guò)我如何測(cè)試正確的參數(shù)是否以正確的順序傳遞?編輯:不一定必須與 Mockito 一起使用,我如何使此測(cè)試更具彈性?
查看完整描述

3 回答

?
MMMHUHU

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

這是因?yàn)閭鬟f給 Calc.divide 的值仍然相同。Mockito 驗(yàn)證傳遞的值而不是參數(shù)的名稱(chēng)。因此更改 Calc 類(lèi)中參數(shù)的順序不會(huì)影響測(cè)試,除非您更改方法 serviceAMethod 中完成的調(diào)用以反映更改。


public void serviceAMethod() {

  //do somehting

  a=getA();

  b=getB();

  calc.divide(b,a);

}

只有在您更改此邏輯(這是您正在測(cè)試的)之后,您的測(cè)試才會(huì)失敗。


如果您使用實(shí)際值,您可以看到這一點(diǎn):


public void serviceAMethod() {

   a=getA(); // EG: 1 

   b=getB(); // EG: 2

   calc.divide(1, 2); // effective call

}

如果您在 Calc 類(lèi)中交換 a 和 b,它仍將使用值 1、2 調(diào)用。然后您測(cè)試以下內(nèi)容:


verify(calcMock).divide(1, 2);


查看完整回答
反對(duì) 回復(fù) 2021-11-11
?
慕絲7291255

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

好的,這是我的解決方案,我認(rèn)為它比完整的集成測(cè)試更好


我已將參數(shù)重構(gòu)為 pojo


public class OperationRequest {

    private int firstOperand;

    private int secondOperand;

    //equals and hashCode, important!

}

然后 Calc.divide 變成


calc.divide(OperationRequest request);

和斷言


verify(calcMock).divide(new OperationRequest(1,2));

如果您交換操作數(shù),這將失敗


查看完整回答
反對(duì) 回復(fù) 2021-11-11
?
慕容森

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

對(duì) serviceAMethod 的測(cè)試是在假設(shè)簽名的情況下編寫(xiě)的,divide即第一個(gè)參數(shù)是被除數(shù),第二個(gè)參數(shù)是除數(shù)。

現(xiàn)在 的簽名divide發(fā)生了變化,即第一個(gè)參數(shù)現(xiàn)在是一個(gè)除數(shù),第二個(gè)參數(shù)是一個(gè)被除數(shù)。但是測(cè)試serviceAMethod還是通過(guò)了。

calc 的單元測(cè)試肯定會(huì)捕捉到這一點(diǎn),但是如果divide在這種情況下對(duì)每個(gè)客戶(hù)端的某些測(cè)試也失敗了,這會(huì)很方便,因?yàn)檫@種簽名的更改divide肯定會(huì)破壞客戶(hù)端并需要更改客戶(hù)端。

當(dāng)您更改方法解釋其參數(shù)的方式時(shí),這肯定需要更改方法的客戶(hù)端。模擬測(cè)試divide無(wú)法檢測(cè)到這種變化。

serviceAMethod使用 real的集成測(cè)試Calc會(huì)檢測(cè)到這種變化并且會(huì)中斷。這會(huì)給你一個(gè)提醒,serviceAMethod應(yīng)該改變它以其他順序傳遞參數(shù)。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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