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

[Springboot 單元測試筆記] - Mock 和 spy的使用

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

Springboot單元測試 - 依賴類mock測試

通常單元測試中,我們會隔離依賴對于測試類的影響,也就是假設所有依賴的一定會輸出理想結果,在測試中可以通過Mock方法來確保輸出結果,這也就引入另一個測試框架Mockito。

Mockito框架的作用就是模擬接口功能,并不運行模擬接口的實際邏輯,而是直接輸出一個假定結果。

Mockito常見注釋及方法

@Mock 被注釋的對象會作為Mock對象
@InjectMocks 被注釋的對象依賴于@Mock的對象,通常是測試對象
when(<MockObject>.<method>).thenReturn() 對@Mock的對象進行模擬輸出
doThrow(<Exception>).when(<mockObject>).<Method> 對Mock的對象模擬拋出一個異常
spy() 也是建立一個模擬對象,但可以

待測試類 - AController

public class AController {

    @Autowired
    MongoService mongoService;

    public boolean testBean() {
        boolean res = mongoService.testMethod2(4);
        return res;
    }

}

依賴類 - MongoService

@Service
public class MongoService {

    public void output() {
        System.out.println("This is a bean!!");
    }

    public boolean testMethod1(int num) {
        return num > 0;
    }

    public boolean testMethod2(int num) {
        int val = getVal();
        return val > num;
    }

    private int getVal() {
        return 2;
    }
}

Mockito測試類 - RunWith需要運行MockitoJUnitRunner.class才能使用Mockito相關注解

方法1: 使用@Mock,更為簡潔只需加入注解就可以mock對應成員變量 (該成員變量可以是非依賴注入)

@RunWith(MockitoJUnitRunner.class)
public class MockTest {

    @Mock
    MongoService mongoService;

    @InjectMocks
    AController aController;

    @Test
    public void testMock1() {
        when(mongoService.testMethod2(Mockito.anyInt())).thenReturn(true);
        Assert.assertEquals(aController.testBean(), true);
    }

    @Test(expected = Exception.class)
    public void testMock2() {
        doThrow(Exception.class).when(mongoService).testMethod2(Mockito.anyInt());
        aController.testBean();
    }
}

方法2: 使用Mock函數(shù)

public class MockTest {

    MongoService mongoService;

    AController aController;

    @BeforeEach
    public void init() {
        mongoService = Mock(MongoService.class);
        aController = new AController();
        /* 假設 AController class 中有setter用于加載mongoService */
        aController.setMongoService(mongoService);
        
    }

    @Test
    public void testMock1() {
        when(mongoService.testMethod2(Mockito.anyInt())).thenReturn(true);
        Assert.assertEquals(aController.testBean(), true);
    }

    @Test(expected = Exception.class)
    public void testMock2() {
        doThrow(Exception.class).when(mongoService).testMethod2(Mockito.anyInt());
        aController.testBean();
    }
}

?

@Mock 和 @Spy區(qū)別

上面兩種注釋都是建立一個模擬對象,但是區(qū)別是@Mock注釋的對象是完全虛擬,不能調用這個Mock對象的任何方法,只能通過when().thenReturn() 來進行模擬輸出;但是@Spy是建立一個真實的Mock對象,可以調用對象中任何方法也可以模擬某些方法的輸出。@Spy大大增加了測試的自由度,比如如果某個測試類你只想模擬某個方法但是想要某些方法的真實輸出,這是@Spy就可以解決這個問題。

舉例 - 模擬MongoService其中一個方法,并測試另一個方法真實輸出文章來源地址http://www.zghlxwxcb.cn/news/detail-536303.html

    @Spy
    MongoService mongoServiceSpy;

    @Test
    public void testSpy() {
        /** 模擬MongoService中 getVal并測試testMethod2*/
        when(mongoServiceSpy.getVal()).thenReturn(3);
        Assert.assertEquals(mongoServiceSpy.testMethod2(2), true);
    }

Reference

  • SpringBoot Test及注解詳解 - codedot - 博客園
  • 單元測試之Mockito與PowerMock - 簡書

到了這里,關于[Springboot 單元測試筆記] - Mock 和 spy的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關文章

  • 測試人必會的Python內(nèi)置庫:unittest.mock(單元測試mock的基礎使用)

    unittest.mock是用于在單元測試中模擬和替換指定的對象及行為,以便測試用例更加準確地進行測試運行。例如對于以下代碼,想要針對函數(shù)func_a寫一個簡單的單元測試: 但是這樣的話,函數(shù)func_b和func_c的邏輯都需要一起測試,在單元測試中這明顯是不合理的,對于想要測試的

    2024年02月01日
    瀏覽(22)
  • C++類對象單元測試中的Mock使用

    ??在進行單元測試時,我們想要測試自己縮寫 函數(shù)A ,但是 函數(shù)A 卻依賴于 函數(shù)B ,當 函數(shù)B 無法滿足預期時就無法對 函數(shù)A 進行測試,主要由于下面幾個原因: 函數(shù)B 依賴于硬件設備 真實的 函數(shù)B 的返回值無法滿足我們的預期 團隊開發(fā)中 函數(shù)B 尚未實現(xiàn) ??這時就需要

    2023年04月15日
    瀏覽(24)
  • python技術棧 之 單元測試中mock的使用

    python技術棧 之 單元測試中mock的使用

    一、什么是mock? mock測試就是在測試過程中,對于某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來創(chuàng)建以便測試的測試方法。 二、mock的作用 特別是開發(fā)過程中上下游未完成的工序導致當前無法測試,需要虛擬某些特定對象以便測試。 unittest是python內(nèi)置的單元測

    2024年02月13日
    瀏覽(22)
  • python技術棧之單元測試中mock的使用

    mock測試就是在測試過程中,對于某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來創(chuàng)建以便測試的測試方法。 特別是開發(fā)過程中上下游未完成的工序導致當前無法測試,需要虛擬某些特定對象以便測試。 unittest是python內(nèi)置的單元測試庫,在做接口測試時,如果開

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

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

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

    2024年02月16日
    瀏覽(21)
  • Spring Boot單元測試使用MockBean注解向Service注入Mock對象

    我們在測試時有一個Service,我們需要測試Service,但Service內(nèi)部依賴ServiceA、ServiceB,此時我們希望Mock ServiceA,ServiceB 注入真實對象。 在Spring Boot Test中使用@Spy注解標記Service對象,但是其余真實對象無法注入,因為@Spy注解只能部分模擬對象,而無法注入真實對象。在這種情況下

    2024年02月13日
    瀏覽(35)
  • spring boot 單元測試JUnit5使用Mockito模擬Mock數(shù)據(jù)調用

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

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

    單元測試與Mock

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

    2024年02月08日
    瀏覽(46)
  • 單元測試junit+mock

    單元測試junit+mock

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

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

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

    2024年02月03日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包