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

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

Java:?jiǎn)卧獪y(cè)試設(shè)計(jì)

Java:?jiǎn)卧獪y(cè)試設(shè)計(jì)

白衣染霜花 2023-04-19 17:01:44
我已經(jīng)實(shí)現(xiàn)了一個(gè)方法getUsers(),它基本上構(gòu)造一個(gè)List<ShoppingCart>,然后創(chuàng)建一個(gè)List<User>:public List<User> getUsers() {   // construct a liste of List<ShoppingCart>   ....   // update    ...}的構(gòu)造List<ShoppingCart>包含很多邏輯,所以我決定將這些代碼移出并創(chuàng)建一個(gè)私有方法:public List<User> getUsers() {   // construct a liste of List<ShoppingCart>   List<ShoppingCart> shoppingList = getShoppingList();   // update    ...}private List<ShoppingCart> getShoppingList() {  ...}現(xiàn)在我需要進(jìn)行單元測(cè)試getUsers()。但是我意識(shí)到我很難得到它,List<ShoppingCart>因?yàn)樗且环N私有方法。而且我不想公開(kāi),getShoppingList()因?yàn)槲以谄渌魏蔚胤蕉疾恍枰?。我認(rèn)為我的代碼中存在設(shè)計(jì)問(wèn)題,對(duì)這些包含私有方法返回值的方法進(jìn)行單元測(cè)試的最佳方法是什么?謝謝。更新不,這與具有許多私有方法的 Java 測(cè)試類不同,我的問(wèn)題不是是否有必要測(cè)試私有方法,而是更好的設(shè)計(jì)應(yīng)該是什么
查看完整描述

3 回答

?
LEATH

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

我認(rèn)為好的選擇是用戶和購(gòu)物卡的單獨(dú)邏輯。如果您同意我的看法,您可以將購(gòu)物卡邏輯移動(dòng)到不同的類,然后您可以在您的測(cè)試中模擬這個(gè)邏輯,然后像這樣編寫(xiě)測(cè)試getUsers():


public class UserTest {


 @Mock

 private ShoppingCard shoppingCard;

 private User sut = new User();


 @Before

 public void setUp(){

    MockitoAnnotations.initMocks(this);

 }



 @Test

 public void shouldReturnUsersEmptyListWhenCardsEmpty(){

    //given

    when(shoppingCard.getShoppingCards()).thenReturn(Collections.emptyList());


    //when

    final List<User> result = sut.getUsers();


    //then

    assertEquals(0, result.size());

 }

}


查看完整回答
反對(duì) 回復(fù) 2023-04-19
?
慕婉清6462132

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

最后,這是關(guān)于平衡“純度”和“現(xiàn)實(shí)世界”?!

意思是:如果你堅(jiān)持使用私有方法,那么這會(huì)阻止你進(jìn)行部分模擬。它會(huì)阻止您直接測(cè)試該方法。

就個(gè)人而言,我有時(shí)會(huì)在這種情況下變得務(wù)實(shí):只需將其他方法包保護(hù)(而不是私有)。然后您可以從單元測(cè)試訪問(wèn)它,并在必要時(shí)使用 Mockito 間諜來(lái)部分模擬此類方法。

“現(xiàn)實(shí)世界”設(shè)計(jì)解決方案:考慮“獲取購(gòu)物清單”是否值得完全獨(dú)立。實(shí)際上,這樣一個(gè)“復(fù)雜”的活動(dòng)……作為私有方法放在某個(gè)地方聽(tīng)起來(lái)很奇怪。這樣做的后果可能是:您開(kāi)始復(fù)制代碼。如果有一個(gè)中央服務(wù)(類)可以為您提供“購(gòu)物清單”,那么任何需要該清單的代碼……都可以從那里獲得。


查看完整回答
反對(duì) 回復(fù) 2023-04-19
?
DIEA

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

如果方法應(yīng)該是私有的,則不應(yīng)對(duì)其進(jìn)行單元測(cè)試。這給您留下了 2 個(gè)選擇:

  • 公開(kāi)getShoppingList()_

  • 不要單元測(cè)試getShoppingList()

如果正確性getShoppingList()是整個(gè)應(yīng)用程序運(yùn)行的基本要求,則應(yīng)將其公開(kāi)并為其創(chuàng)建單元測(cè)試。

但是,如果它僅由隨后處理它的代碼調(diào)用,并且這些方法是面向用戶的,那么您可以簡(jiǎn)單地測(cè)試這些方法并確保它們按預(yù)期運(yùn)行。這然后被動(dòng)地保證getShoppingList()按預(yù)期工作。

想象一下,您有一個(gè)錯(cuò)誤導(dǎo)致getShoppingList()拋出某種異常。然后,在你的測(cè)試中,getUsers()你應(yīng)該看到無(wú)論如何都會(huì)拋出異常(假設(shè)它調(diào)用getShoppingList().


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

添加回答

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