国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

CompletableFuture的單元測試Mock

這篇具有很好參考價值的文章主要介紹了CompletableFuture的單元測試Mock。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在spring項目,假設我們有一個方法

//?一個executor,和普通定義線程池一樣(此處是spring自帶,@Scheduled注解用到的全局線程池)
@Resource
private?ThreadPoolTaskExecutor?executor;

//?另一個需要裝配的假定的服務
@Resource
private?AnotherService?anotherService;

//?CompletableFuture,需要被測試的方法
public?String?getProductBillSummaryList(String?input)?{
????//?異步操作
????CompletableFuture<String>?resultFuture?=?CompletableFuture.supplyAsync(
????????????()?->?anotherService.someMethod(input),?executor);
????
????//?等待執(zhí)行完畢
????CompletableFuture.allOf(resultFuture).join();
????try?{
????????String?s?=?resultFuture.get();
????????System.out.println(s);
????}?catch?(Exception?e)?{
????????e.printStackTrace();
????}
????return?null;
}

我們對這個方法單元測試,大概率就直接寫成:

@Mock
private?AnotherService?anotherService;

@InjectMocks
private?ProductTransactionSearchServiceImpl?productTransactionSearchService;

@Test
public?void?getProductBillSummaryList()?{
????Mockito.when(anotherService.someMethod(Mockito.any())).thenReturn("mockString");
????String?res?=?productTransactionSearchService.getProductBillSummaryList("input");
????Assert.assertNull(res);
}

這樣會導致Completable的線程不運行,一直阻塞在紅色箭頭指示的地方:

CompletableFuture的單元測試Mock,單元測試,單元測試,java,spring

等待線程執(zhí)行完畢。然而線程并沒有執(zhí)行。

此時需要模擬并驅動異步線程的執(zhí)行,因此需要這樣寫:

@Mock
private?AnotherService?anotherService;

//?需要增加這個executor的mock
@Mock
private?ThreadPoolTaskExecutor?executor;

@InjectMocks
private?ProductTransactionSearchServiceImpl?productTransactionSearchService;

@Test
public?void?getProductBillSummaryList()?{
????Mockito.when(anotherService.someMethod(Mockito.any())).thenReturn("mockString");
????//?新增對異步線程里面Runnable方法的驅動
????Mockito.doAnswer(
????????(InvocationOnMock?invocation)?->?{
????????????((Runnable)?invocation.getArguments()[0]).run();
????????????return?null;
????????}
????).when(executor).execute(Mockito.any(Runnable.class));
????String?res?=?productTransactionSearchService.getProductBillSummaryList("input");
????Assert.assertNull(res);
}

這樣就mock了對Runnable方法的運行(就是執(zhí)行run方法,只要有調用就run,不阻塞)

運行單測就可以正常通過了。

參考

java - CompletableFuture usability and unit test - Stack Overflow

?文章來源地址http://www.zghlxwxcb.cn/news/detail-697596.html

到了這里,關于CompletableFuture的單元測試Mock的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • spring boot 單元測試JUnit5使用Mockito模擬Mock數據調用

    spring boot 單元測試JUnit5使用Mockito模擬Mock數據調用 好大一批新用法,大家靜下心來好好看看吧 1. spring boot 使用 Mockito.when().thenReturn()模擬返回值 Mockito 是一種 Java mock 框架,他主要就是用來做 mock 測試的,他可以模擬任何 Spring 管理的 bean、模擬方法的返回值、模擬拋出異常…

    2024年02月15日
    瀏覽(31)
  • Java的單元測試Testng和mock

    目錄 單元測試重要性 TestNG TestNG官網介紹 TestNG教程 TestNG注解:?

    2024年02月07日
    瀏覽(20)
  • 15.Spring Boot單元測試(Service、Mock、Feign、Http Rest API)

    15.Spring Boot單元測試(Service、Mock、Feign、Http Rest API)

    Spring Boot專欄目錄(點擊進入…) **test**表示依賴的組件僅僅參與測試相關的工作,包括測試代碼的編譯和執(zhí)行,不會被打包包含進去;spring-boot-starter-test是Spring Boot提供項目測試的工具包,內置了多種測試工具,方便我們在項目中做單元測試、集成測試。 引入spring-boot-star

    2024年02月04日
    瀏覽(40)
  • Java用正確的姿勢寫單元測試以及mock

    對于一些簡單的功能或業(yè)務,我們也許可以通過前端調試、postman等接口工具、main函數調用進行測試。但這每次改動代碼都要人力測試,耗費大量的人力資源且不高效,真正的項目中單元測試是必不可少的。 單元測試的三步走: 1、組裝方法入參 2、執(zhí)行方法 3、對方法的執(zhí)行

    2024年02月13日
    瀏覽(28)
  • 在Java微服務項目中,如何使用Mock來進行單元測試?

    在Java微服務項目中,如何使用Mock來進行單元測試?

    摘要: 在系統開發(fā)的過程中,單元測試是其中的一個重要環(huán)節(jié)。在Java微服務項目中,Spring框架本身就為我們提供了一套單元測試的框架SpringBootTest。如果我們在學校完成課堂作業(yè)或出于興趣愛好自學,是可以使用Spring自帶的單元測試框架進行單測的。 工作中,這種通過Spri

    2024年02月16日
    瀏覽(21)
  • Service層代碼單元測試以及單元測試如何Mock

    Service層代碼單元測試以及單元測試如何Mock

    接著上一篇文章:單元測試入門篇,本篇文章作為單元測試的進階篇,主要介紹如何對Springboot Service層代碼做單元測試,以及單元測試中涉及外調服務時,如何通過Mock完成測試。 現在項目都流行前后端代碼分離,后端使用springboot框架,在service層編寫接口代碼實現邏輯。假設

    2023年04月08日
    瀏覽(18)
  • 單元測試junit+mock

    單元測試junit+mock

    單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。至于“單元”的大小或范圍,并沒有一個明確的標準,“單元”可以是一個方法、類、功能模塊或者子系統。 單元測試通常和白盒測試聯系到一起 ,如果單從概念上來講兩者是有區(qū)別的,不過我們通

    2024年02月08日
    瀏覽(36)
  • Testify Mock 單元測試

    Testify 提供了單測方便的斷言能力,這里的斷言是將對代碼實際返回的斷言,代碼的實際輸出和預期是否一致。下面是 gin-gonic/gin 代碼庫的單測代碼,Testify 還提供了很多其他的方法: 單元測試中也會存在不穩(wěn)定的代碼,我們的入參雖然保持不變,但每次單測的結果可能會發(fā)

    2024年02月03日
    瀏覽(25)
  • 單元測試與Mock

    單元測試與Mock

    作者:一笑欽陳 郵箱:xianqin_chen@163.com 你好,我是一笑欽陳,《零零后程序員成長之路》作者,一線互聯網 Java 工程師。很高興你閱讀我的博客,讓我們共同成長進步! 提醒:在接下來您對本博客的閱讀中,如果遇到一些內容、圖稿、代碼等中的勘誤都可以通過郵件進行反

    2024年02月08日
    瀏覽(46)
  • mock寫單元測試和查數據庫的單元測試

    mock寫單元測試和查數據庫的單元測試

    一:mock方式 在測試類上添加注解 將需要測試的類bean添加進來,該類中的其他bean也添加進來 給被測試類中用到的參數、返回值類創(chuàng)建對象 創(chuàng)建BeforeEach和AfterEach方法,在BeforeEach方法中給參數,返回值設置值 然后在test方法中設置被測試的方法 二:可以檢測dao層sql的單元測試

    2024年02月15日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包