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

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

將元素添加到模擬列表

將元素添加到模擬列表

白衣非少年 2023-05-24 14:45:15
我正在嘗試對(duì)負(fù)責(zé)添加到地圖分類(lèi)書(shū)籍的方法進(jìn)行單元測(cè)試。@Servicepublic class BookService {    private final List<BookServiceSource> sources;    @Autowired    public BookService(List<BookServiceSource> sources) {        this.sources = sources;    }    public Map<Bookstore, List<Book>> getBooksByCategory(CategoryType category) {        return sources.stream()                .collect(Collectors.toMap(BookServiceSource::getName,                        source -> source.getBooksByCategory(category)));    }    }BookSerivceSource是一個(gè)接口。該接口由兩個(gè)類(lèi)實(shí)現(xiàn)。我只提供一個(gè),因?yàn)榈诙€(gè)非常相似。Jsoup連接器:package bookstore.scraper.utilities;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.springframework.stereotype.Component;import java.io.IOException;@Componentpublic class JSoupConnector {    public Document connect(String url) {        try {            return Jsoup.connect(url).get();        } catch (IOException e) {            throw new IllegalArgumentException("Cannot connect to" + url);        }    }}屬性類(lèi):package bookstore.scraper.urlproperties;import lombok.Getter;import lombok.Setter;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Getter@Setter@Component@ConfigurationProperties("external.library.url.empik")public class EmpikUrlProperties {    private String mostPreciseBook;    private String bestSellers;    private String concreteBook;    private String romances;    private String biographies;    private String crime;    private String guides;    private String fantasy;}在調(diào)試測(cè)試時(shí),我看到大小sources為 0。我應(yīng)該如何將模擬對(duì)象添加到源列表中,或者您能告訴我是否有更好的方法嗎?
查看完整描述

3 回答

?
不負(fù)相思意

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

如前所述,不要嘗試模擬該List對(duì)象。

通常也避免為您可以簡(jiǎn)單地自己創(chuàng)建的對(duì)象創(chuàng)建模擬,并嘗試將自己限制為僅模擬依賴(lài)項(xiàng)。


測(cè)試的簡(jiǎn)化版本可能如下所示:


由于您的測(cè)試涵蓋的內(nèi)容比Unit BookService 我決定在這個(gè)例子中將其最小化。


您可能希望在針對(duì)特定實(shí)現(xiàn)的測(cè)試中執(zhí)行所有其他操作。


@Test

public void getBooksByCategory() {


    List<Book> empikBestsellers = EmpikBookProvider.prepare5Bestsellers();

    List<Book> merlinBestsellers = MerlinBookProvider.prepare5Bestsellers();


    BookServiceSource bookServiceSource1 = Mockito.mock(BookServiceSource.class);

    Mockito.when(bookServiceSource1.getName()).thenReturn(Bookstore.EMPIK);

    Mockito.when(bookServiceSource1.getBooksByCategory(CategoryType.CRIME)).thenReturn(empikBestsellers);   


    BookServiceSource bookServiceSource2 = Mockito.mock(BookServiceSource.class);

    Mockito.when(bookServiceSource2.getName()).thenReturn(Bookstore.MERLIN);

    Mockito.when(bookServiceSource2.getBooksByCategory(CategoryType.CRIME)).thenReturn(merlinBestsellers);      


    List<BookServiceSource> sources = new ArrayList<>();

    sources.add(bookServiceSource1);

    sources.add(bookServiceSource2);


    BookService service = new BookService(sources);

    Map<Bookstore, List<Book>> actualMap = service.getBooksByCategory(CategoryType.CRIME);


    // compare result

}


查看完整回答
反對(duì) 回復(fù) 2023-05-24
?
繁花如伊

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

我認(rèn)為您不應(yīng)該嘲笑 BookServiceSource 列表,因?yàn)槟砑拥膬?nèi)容不會(huì)執(zhí)行任何操作,因?yàn)樗皇钦嬲牧斜怼?br />

如果可以的話(huà),不應(yīng)該使用它,它有靜默失敗的傾向。

我試圖提出的另一點(diǎn)是您正在使用模擬列表,因此當(dāng)它被告知添加元素時(shí)它不會(huì)。

您可以使用兩種解決問(wèn)題的方法。首先,您可以為 BookServiceSources 流創(chuàng)建 when thenreturn,而不是推薦的解決方案。

其次,更好的方法是創(chuàng)建一個(gè)使用 @Before 注釋創(chuàng)建 BookService 的 testSetup 方法。

@Before

public void testSetup(){

?List<BookServiceSource> list = new LinkedList<>();

?list.add(merlinSource);

?list.add(empikSource);

?bookService = new BookService(list);

}



查看完整回答
反對(duì) 回復(fù) 2023-05-24
?
鴻蒙傳說(shuō)

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

嘗試@Spy。它允許您注入您自己初始化的列表的實(shí)際實(shí)例,也可以部分模擬。

@Spy
private?List<BookServiceSource>?sources?=?new?ArrayList<>();

似乎您為列表使用了不同的名稱(chēng),更喜歡使用注入模擬字段的 smae 名稱(chēng);消息來(lái)源

這里有很好的解釋。

5. Mockito 中的模擬與間諜

當(dāng) Mockito 創(chuàng)建一個(gè)模擬時(shí)——它是從一個(gè)類(lèi)型的類(lèi)中創(chuàng)建的,而不是從一個(gè)實(shí)際的實(shí)例中創(chuàng)建的。模擬只是創(chuàng)建了類(lèi)的一個(gè)基本的 shell 實(shí)例,完全用于跟蹤與它的交互。

另一方面,間諜將包裝現(xiàn)有實(shí)例。它仍將以與普通實(shí)例相同的方式運(yùn)行——唯一的區(qū)別是它還將被檢測(cè)以跟蹤與其進(jìn)行的所有交互。


查看完整回答
反對(duì) 回復(fù) 2023-05-24
  • 3 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專(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)