3 回答

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());
}
}

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)物清單”,那么任何需要該清單的代碼……都可以從那里獲得。

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()
.
添加回答
舉報(bào)