成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

BDDMockito 快速指南,你學會了嗎?

開發 前端
Mockito傳統mock是在排列步驟中使用when(obj).then*()執行的,稍后,可以在Assert步驟中使用verify()驗證與mock的交互。

概述

BDD一詞最早由Dan North于2006年創造。BDD鼓勵用自然的、可讀的語言編寫測試,重點關注應用程序的行為。

它定義了一種結構清晰的測試編寫方式,分為三個部分(排列、動作、斷言):

  • 給定一些先決條件(排列)
  • 行動發生時(行動)
  • 然后驗證輸出(Assert)

Maven依賴項:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>2.21.0</version>
</dependency>

包含以下靜態導入,我們的測試可以變得更可讀:

import static org.mockito.BDDMockito.*;

BDDMockito擴展了Mockito,所以我們不會錯過傳統Mockito API提供的任何功能。

Mockito與BDDMockito

Mockito傳統mock是在排列步驟中使用when(obj).then*()執行的,稍后,可以在Assert步驟中使用verify()驗證與mock的交互。

BDDMockito為各種Mockito方法提供了BDD別名,因此我們可以使用given(而不是when)編寫Arrange步驟,同樣,我們可以使用then(而不是verify)編寫Assert步驟。

讓我們看一個使用傳統Mockito的測試體示例:

when(phoneBookRepository.contains(momContactName))
  .thenReturn(false);
 
phoneBookService.register(momContactName, momPhoneNumber);
 
verify(phoneBookRepository)
  .insert(momContactName, momPhoneNumber);

讓我們看看與BDDMockito相比如何:

given(phoneBookRepository.contains(momContactName))
  .willReturn(false);
 
phoneBookService.register(momContactName, momPhoneNumber);
 
then(phoneBookRepository)
  .should()
  .insert(momContactName, momPhoneNumber);

BDDMockito Mock

讓我們試著測試PhoneBookService,我們需要模擬PhoneBookRepository:

public class PhoneBookService {
    private PhoneBookRepository phoneBookRepository;

    public void register(String name, String phone) {
        if(!name.isEmpty() && !phone.isEmpty()
          && !phoneBookRepository.contains(name)) {
            phoneBookRepository.insert(name, phone);
        }
    }

    public String search(String name) {
        if(!name.isEmpty() && phoneBookRepository.contains(name)) {
            return phoneBookRepository.getPhoneNumberByContactName(name);
        }
        return null;
    }
}

BDDMockito作為Mockito允許我們返回一個可能是固定的或動態的值。它還允許我們拋出一個異常:

  • 返回固定值

使用BDDMockito,我們可以很容易地將Mockito配置為在調用mock對象目標方法時返回固定結果:

given(phoneBookRepository.contains(momContactName))
  .willReturn(false);
 
phoneBookService.register(xContactName, "");
 
then(phoneBookRepository)
  .should(never())
  .insert(momContactName, momPhoneNumber);
  • 返回動態值

BDDMockito允許我們提供一種更復雜的返回值的方法。我們可以根據輸入返回一個動態結果:

given(phoneBookRepository.contains(momContactName))
  .willReturn(true);
given(phoneBookRepository.getPhoneNumberByContactName(momContactName))
  .will((InvocationOnMock invocation) ->
    invocation.getArgument(0).equals(momContactName) 
      ? momPhoneNumber 
      : null);
phoneBookService.search(momContactName);
then(phoneBookRepository)
  .should()
  .getPhoneNumberByContactName(momContactName);
  • 引發異常

告訴Mockito拋出異常非常簡單:

given(phoneBookRepository.contains(xContactName))
  .willReturn(false);
willThrow(new RuntimeException())
  .given(phoneBookRepository)
  .insert(any(String.class), eq(tooLongPhoneNumber));

try {
    phoneBookService.register(xContactName, tooLongPhoneNumber);
    fail("Should throw exception");
} catch (RuntimeException ex) { }

then(phoneBookRepository)
  .should(never())
  .insert(momContactName, tooLongPhoneNumber);

注意我們是如何交換given和will的位置,這是強制性的,以防我們mock一個沒有返回值的方法。

還要注意,我們使用了(any,eq)等參數匹配器,以提供一種更通用的基于標準而非固定值的mock方式。

結論

我們討論了BDDMockito如何試圖將BDD特性引入Mockito測試,并討論了Mockito和BDDMockito之間的一些差異。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-01-30 09:01:54

圖表指南圖形化

2022-05-06 09:00:56

CSS元素Flex

2022-10-09 09:30:33

CSS瀏覽器十六進制

2022-04-13 09:01:45

SASSCSS處理器

2023-05-04 10:08:00

Windows 10WinAFL二進制

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2022-10-11 08:48:08

HTTP狀態碼瀏覽器

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2022-04-01 09:02:19

CSS選擇器HTML

2023-10-10 11:04:11

Rust難點內存

2024-05-06 00:00:00

InnoDBView隔離

2024-07-31 08:39:45

Git命令暫存區

2022-07-08 09:27:48

CSSIFC模型

2023-12-12 08:02:10

2024-08-06 09:47:57

2025-03-12 00:35:25

多樣化郵件HTML
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品a视频一区www | 久久免费精品 | 亚洲性综合网 | 欧美日韩高清在线观看 | 欧美一区二区三区 | 国内精品久久久久久 | 久久91av| 国产一级在线观看 | a级毛片免费高清视频 | 精品熟人一区二区三区四区 | 日韩高清中文字幕 | 日本中文字幕日韩精品免费 | 九九热最新视频 | 99久久婷婷国产综合精品电影 | 国产中文在线观看 | 日韩在线一区二区 | 精品久久久久久久 | 91精品国产91久久久久久 | 91影院 | 中国一级大毛片 | 水蜜桃亚洲一二三四在线 | 精品日本久久久久久久久久 | 成人久草 | 久久久久久久久久久久久九 | 91精品国产综合久久久久久漫画 | 亚洲精品一 | 国偷自产av一区二区三区 | 男女视频在线观看 | 四虎影音| 日韩一区二区在线观看 | 亚洲精品久久久久中文字幕欢迎你 | av看看| 中文字幕1区2区3区 日韩在线视频免费观看 | 成人无遮挡毛片免费看 | 午夜免费视频观看 | 日韩二| 在线观看电影av | 成人福利网 | 涩涩片影院 | 美国av片在线观看 | 亚洲久久|