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

Java單元測(cè)試之Mockito

這篇具有很好參考價(jià)值的文章主要介紹了Java單元測(cè)試之Mockito。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Mockito

Mockito是一種Java Mock框架,主要就是用來做Mock測(cè)試的,它可以模擬任何Spring管理的Bean、模擬方法的返回值、模擬拋出異常等等,同時(shí)也會(huì)記錄調(diào)用這些模擬方法的參數(shù)、調(diào)用順序,從而可以校驗(yàn)出這個(gè)Mock對(duì)象是否有被正確的順序調(diào)用,以及按照期望的參數(shù)被調(diào)用。

mockito的特別之處?

Mockito的特別之處在于它是一個(gè)強(qiáng)大的用于Java開發(fā)的模擬測(cè)試框架,通過Mockito我們可以創(chuàng)建和配置Mock對(duì)象,進(jìn)而簡化有外部依賴的類的測(cè)試。Mockito提供了大量的靜態(tài)方法,用于幫助我們來mock對(duì)象,驗(yàn)證行為等等

什么是mockito的stub method?

本人的理解:就是在實(shí)際調(diào)用代碼前,我就規(guī)定它返回什么。
一個(gè)例子:

// 您可以模擬具體的類,而不僅僅是接口s 
LinkedList mockedList = mock(LinkedList.class); 
// 或者使用Mockito 4.10.0+更簡單
// LinkedList mockedList = mock(); 

// 存根(stubbing)在實(shí)際執(zhí)行之前出現(xiàn)
when(mockedList.get(0)).thenReturn("first"); 
// 以下打印“first”
System.out.println(mockedList.get(0)); 
// 下面打印“null”,因?yàn)間et(999)沒有存根
System.out.println(mockedList.get(999));

doThrow

在測(cè)試對(duì)象發(fā)生特定事件時(shí)拋出異常。
例1:

PowerMockito
        .doThrow(new NotPermittedException(HttpServletResponse.SC_FORBIDDEN,
                ErrorMsgResourceKeys.auth_accessDenied, "GroupPermissions", null))
        .when(AdminPermissionCheck.class);
AdminPermissionCheck.checkAdminPermission(authorizationsVO, lstPermissions, true);

例2:

@Test
void whenConfigVoidRetunMethodToThrowEx_thenExIsThrown() {
    MyDictionary dictMock = mock(MyDictionary.class);
    doThrow(IllegalStateException.class).when(dictMock)
        .add(anyString(), anyString());
    assertThrows(IllegalStateException.class, () -> {
        dictMock.add("word", "meaning");
    });
}

mockito mock一個(gè)返回值為void的函數(shù)

最初接觸 Mockito 還思考并嘗試過如何用它來 mock 返回值為 void 的方法,然而 Google 查找到的一般都會(huì)說用 doThrow() 的辦法

doThrow(new RuntimeException()).when(mockObject).methodWithVoidReturn();

因?yàn)闊o法使用常規(guī)的 when(mockObject.foo()).thenReturn(...) 的方法。

當(dāng)時(shí)我就納悶,為何我想 mock 一個(gè)返回值為 void 的方法,卻是在模擬拋出一個(gè)異常,現(xiàn)在想來如果一個(gè)返回值為 void 的方法,為何要去 mock 這個(gè)方法呢?

回想一個(gè)我們要 mock 一個(gè)方法的意圖是什么:

  1. 在特定輸入?yún)?shù)的情況下期待需要的輸出結(jié)果(返回值)
  2. 在方法拋出某種類型異常調(diào)用者作出的反應(yīng)

對(duì)于 void 返回值的方法,如果要驗(yàn)證有沒有被調(diào)用過幾次可以在事后用 verify() 方法去斷言。所以基本上對(duì)于 void 返回值的方法一般可不用去 mock 它,只需用 verify() 去驗(yàn)證,或者就是像前面一樣模擬出現(xiàn)異常時(shí)的情況。

解決單元測(cè)試Mockito模擬方法內(nèi)new對(duì)象的問題

解決單元測(cè)試Mockito模擬方法內(nèi)new對(duì)象的問題_mockito new_半斤米粉闖天下的博客-CSDN博客
記PowerMockito whenNew的一個(gè)坑_Brain_L的博客-CSDN博客
@PrepareForTest后面應(yīng)該加上被測(cè)試的類,而不是要whenNew的類,被這個(gè)坑過兩次了,特此記錄下。

doReturn().when()與when().thenReturn()

java - doReturn().when()與when().thenReturn() - 成長之路 - SegmentFault 思否
doReturn().when()是無副作用的。
when().thenReturn()是有副作用的。
如果有時(shí)候報(bào)錯(cuò)missing thenReturn等問題,可以把(對(duì)象.方法)改為.(對(duì)象).方法

mockito怎么mock final修飾的類?

如果使用Mockito.mock(Gson.class),會(huì)報(bào)錯(cuò):

Mockito cannot mock/spy because : - final class

這是因?yàn)榈桶姹镜膍ockito是不能mock final類的。

解決方案:Mockito不能mock final類的解決辦法_南瓜慢說的博客-CSDN博客

改變mockito的版本,修改maven依賴如下:

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-inline</artifactId>
  <version>3.3.3</version>
</dependency>

重跑測(cè)試,問題解決!

然而,萬一隨意變動(dòng)依賴導(dǎo)致其他test失效就得不償失了,因此最好從業(yè)務(wù)邏輯上對(duì)代碼進(jìn)行改造,這里我們涉及的代碼為:

Gson gson = new Gson();
String file = (String) gson.fromJson(result, Map.class).get("data");

Gson是final修飾的類,我們要調(diào)用它的fromJson方法,其實(shí)我們可以構(gòu)造一個(gè)json格式的字符串result:

{data:logs}

然后fromJson就能正常調(diào)用了。文章來源地址http://www.zghlxwxcb.cn/news/detail-647858.html

到了這里,關(guān)于Java單元測(cè)試之Mockito的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • mock寫單元測(cè)試和查數(shù)據(jù)庫的單元測(cè)試

    mock寫單元測(cè)試和查數(shù)據(jù)庫的單元測(cè)試

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

    2024年02月15日
    瀏覽(20)
  • spring boot 單元測(cè)試JUnit5使用Mockito模擬Mock數(shù)據(jù)調(diào)用

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

    2024年02月15日
    瀏覽(31)
  • 簡化Java單元測(cè)試數(shù)據(jù)

    簡化Java單元測(cè)試數(shù)據(jù)

    EasyModeling 是我在2021年圣誕假期期間開發(fā)的一個(gè) Java 注解處理器,采用 Apache-2.0 開源協(xié)議。它可以幫助 Java 單元測(cè)試的編寫者快速構(gòu)造用于測(cè)試的數(shù)據(jù)模型實(shí)例,簡化 Java 項(xiàng)目在單元測(cè)試中準(zhǔn)備測(cè)試數(shù)據(jù)的工作,在提高編寫效率的同時(shí),使單元測(cè)試更加整潔易讀。經(jīng)過一年的

    2024年02月15日
    瀏覽(12)
  • JAVA測(cè)試類注解以及Mock測(cè)試

    我們?cè)陧?xiàng)目中,經(jīng)常要編寫一個(gè)測(cè)試類XXXXXTest,其中一般會(huì)用到以下注解: 1. @RunWith(PowerMockRunner.class) JUnit將會(huì)調(diào)用@RunWith中指定的測(cè)試執(zhí)行類而不是JUnit默認(rèn)的執(zhí)行類。 2.@PrepareForTest({ExampleTestServer.class}) ? ? ? ? 2.1 當(dāng)使用Mockito.whenNew方法時(shí)(下面的Mock測(cè)試),必須加此注解

    2023年04月26日
    瀏覽(19)
  • java 單元測(cè)試創(chuàng)建到測(cè)試(直接連接數(shù)據(jù)庫方法)

    java 單元測(cè)試創(chuàng)建到測(cè)試(直接連接數(shù)據(jù)庫方法)

    一.JUnit5常用注解 @Before注解用于在測(cè)試方法執(zhí)行之前執(zhí)行一次,可以用來設(shè)置測(cè)試環(huán)境、準(zhǔn)備數(shù)據(jù)等。 @After注解用于在測(cè)試方法執(zhí)行之后執(zhí)行一次,可以用來清理測(cè)試環(huán)境、處理異常等。 @Test?表示方法是測(cè)試方法。他的職責(zé)非常單一不能生命任何屬性,拓展的測(cè)試將會(huì)有

    2024年02月06日
    瀏覽(24)
  • java單元測(cè)試(二)H2數(shù)據(jù)庫篇

    java單元測(cè)試(二)H2數(shù)據(jù)庫篇

    H2 數(shù)據(jù)庫是一個(gè)用 Java 開發(fā)的嵌入式(內(nèi)存級(jí)別)數(shù)據(jù)庫,它本身只是一個(gè)類庫,也就是只有一個(gè) jar 文件,可以直接嵌入到項(xiàng)目中。 H2數(shù)據(jù)庫又被稱為內(nèi)存數(shù)據(jù)庫,因?yàn)樗С衷趦?nèi)存中創(chuàng)建數(shù)據(jù)庫。 為什么測(cè)試數(shù)據(jù)庫CRUD 對(duì)于Spring項(xiàng)目,特別是測(cè)試Service層或者dao層的代碼時(shí)。需要驗(yàn)

    2024年02月06日
    瀏覽(26)
  • Service層代碼單元測(cè)試以及單元測(cè)試如何Mock

    Service層代碼單元測(cè)試以及單元測(cè)試如何Mock

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

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

    單元測(cè)試junit+mock

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

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

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

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

    單元測(cè)試與Mock

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

    2024年02月08日
    瀏覽(46)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包