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

Java單元測(cè)試及常用語句 | 京東物流技術(shù)團(tuán)隊(duì)

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

1 前言

編寫Java單元測(cè)試用例,即把一段復(fù)雜的代碼拆解成一系列簡(jiǎn)單的單元測(cè)試用例,并且無需啟動(dòng)服務(wù),在短時(shí)間內(nèi)測(cè)試代碼中的處理邏輯。寫好Java單元測(cè)試用例,其實(shí)就是把“復(fù)雜問題簡(jiǎn)單化,建單問題深入化“。在編寫的過程中, 我們也可以對(duì)自己的代碼進(jìn)行一個(gè)二次檢查。

以下是我總結(jié)的一些編寫單元測(cè)試的好處:

1.測(cè)試代碼邏輯時(shí),不需要啟動(dòng)整個(gè)應(yīng)用。

2.單元測(cè)試可以覆蓋邊界值

3.提高原有代碼的復(fù)用

4.可以有效避免代碼改動(dòng)后,對(duì)原有邏輯的潛在影響

2 準(zhǔn)備環(huán)境

Mockito是目前最普遍的單元測(cè)試模擬框架。Mockito可以模擬應(yīng)用中依賴的復(fù)雜對(duì)象,從而把測(cè)試對(duì)象和依賴對(duì)象隔離開。PowerMock為Mockito提供了擴(kuò)展功能。為模擬靜態(tài)方法,final類,和私有方法等。我們選擇使用以Mockito為主,PowerMock為輔的框架來做單元測(cè)試。

2.1 引入Mockito和PowerMock包,在pom.xml文件中加入以下依賴:

<properties>
    <powermock.version>2.0.9</powermock.version>
</properties>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-core</artifactId>
    <version>${powermock.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>${powermock.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>${powermock.version}</version>
    <scope>test</scope>

PowerMock目前最新版本為2.0.9【PowerMock鏈接】由于PowerMock包中已經(jīng)包含了對(duì)應(yīng)的Mockito和JUnit包,所以無需再單獨(dú)引入。

3 一些常用的mock語句

3.1 模擬指定類的對(duì)象實(shí)例,用于模擬依賴對(duì)象(類成員)

在Spring中,這些成員對(duì)象通過@Autowire,@Resource,@Value等方式注入,可能涉及到環(huán)境配置或者依賴第三方接口。在單元測(cè)試中,不是我們關(guān)注的點(diǎn),所以可以用mock模擬

//方法一
Mockito.mock(OrderInfo.class);
//方法二
@Mock
private OrderInfo orderInfo;


@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}

3.2 定義被測(cè)試對(duì)象

把被測(cè)試服務(wù)類進(jìn)行實(shí)例化

@InjectMocks
private OrderServiceImpl orderService;

3.3 模擬枚舉類型/靜態(tài)方法

需要把對(duì)應(yīng)的模擬類放在@PrepareForTest中

//必須添加@RunWith和@PrepareForTest在類前
@RunWith(PowerMockRunner.class)
@PrepareForTest(OrderTypeEnum.class)


//在@Before中添加枚舉mock
@Before
public void beforeTest() {
    mockStatic(OrderTypeEnum.class);
}

3.4 模擬依賴方法

在模擬完依賴的參數(shù)和返回值后,可以利用Mockito功能,進(jìn)行依賴方法的模擬。如果模擬對(duì)象還有方法調(diào)用,則需要模擬這些依賴對(duì)象的方法。

/***
when.thenReturn 和 doReturn.when是兩種實(shí)現(xiàn)方式
只有在使用@Spy時(shí)才會(huì)有區(qū)別
參考鏈接:https://www.imooc.com/wenda/detail/594190#id_653606
***/


//模擬枚舉的方法調(diào)用
when(OrderTypeEnum.getByValue(anyInt())).thenReturn(100);
//模擬依賴對(duì)象的依賴方法調(diào)用
doReturn(resultInfoDTO).when(orderInfoService).getLastOrderInfo(orderInfoDTO);

3.5 模擬構(gòu)造方法

PowerMock提供了對(duì)構(gòu)造方法的模擬,但是需要把構(gòu)造方法的類放在@PrepareForTest中

//必須在@PrepareForTest中添加對(duì)應(yīng)類
@PrepareForTest({OrderTypeEnum.class, OrderServiceImpl.class})
whenNew(OrderInfoDTO.class).withNoArguments().thenReturn(orderInfoDTO);

3.6 驗(yàn)證方法調(diào)用次數(shù)

被測(cè)方法調(diào)用后,一些方法會(huì)出現(xiàn)調(diào)用多次或根據(jù)不同條件進(jìn)行不同次數(shù)的調(diào)用。此時(shí),可以根據(jù)驗(yàn)證方法調(diào)用次數(shù),確定代碼的有效性

verify(orderInfoService,times(1)).getLastOrderInfo(orderInfoDTO);

3.7 驗(yàn)證返回值

對(duì)于方法調(diào)用后的出參,我們會(huì)有一定的預(yù)期。所以,可以根據(jù)校驗(yàn)返回值是否符合預(yù)期,確保返回值的正確性

Assert.assertEquals(result, "123");

3.8 驗(yàn)證異常對(duì)象

JUnit的@Test注解提供了一個(gè)expected屬性,可以指定一個(gè)期望的異常類型,用于捕獲異常并驗(yàn)證其異常類型?!咀ⅰ浚褐荒茯?yàn)證異常類型,不能驗(yàn)證異常信息。

@Test(expected = BPLException.class)

4 單測(cè)舉例

下面是一個(gè)本地方法的單元測(cè)試用例,方法中調(diào)用了外部接口,并且其中包含了枚舉值的使用。

源方法即需要單測(cè)方法:

Java單元測(cè)試及常用語句 | 京東物流技術(shù)團(tuán)隊(duì),測(cè)試,單元測(cè)試,Java,后端,測(cè)試,mock

首先,是單元測(cè)試時(shí)一些必要的初始化

Java單元測(cè)試及常用語句 | 京東物流技術(shù)團(tuán)隊(duì),測(cè)試,單元測(cè)試,Java,后端,測(cè)試,mock

4.1 單測(cè)場(chǎng)景一(確定接口調(diào)用,并返回值正確):

通過verify方法來確定接口是否調(diào)用過,并且只調(diào)用過1次。

通過assert來確認(rèn)返回值是否滿足預(yù)期

Java單元測(cè)試及常用語句 | 京東物流技術(shù)團(tuán)隊(duì),測(cè)試,單元測(cè)試,Java,后端,測(cè)試,mock

4.2 單測(cè)場(chǎng)景二(必要異常是否拋出):

通過在@Test注解上加入expected屬性,測(cè)試當(dāng)接口返回值為空時(shí),是否可以拋出異常

Java單元測(cè)試及常用語句 | 京東物流技術(shù)團(tuán)隊(duì),測(cè)試,單元測(cè)試,Java,后端,測(cè)試,mock

4 總結(jié)

編寫單元測(cè)試在開發(fā)中的地位舉足輕重。在開發(fā)過程中,避免不了優(yōu)化或重構(gòu)歷史代碼。單元測(cè)試,在一定程度上可以幫助測(cè)試更新后邏輯,以及潛在調(diào)用鏈。另外也分享一些鏈接,希望可以幫助大家完成從0到1的搭建。

5 參考資料

  • Java編程技巧之單元測(cè)試用例編寫流程:https://mp.weixin.qq.com/s/hX_RIYs-nBnqVwdq5B4rhg
  • powerMock的Git鏈接:https://github.com/powermock/powermock
  • powerMock簡(jiǎn)介:https://www.baeldung.com/intro-to-powermock
  • 避免Install的時(shí)候Skip test: https://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html

作者:京東物流?牟佳義

來源:京東云開發(fā)者社區(qū) 自猿其說Tech 轉(zhuǎn)載請(qǐng)注明來源文章來源地址http://www.zghlxwxcb.cn/news/detail-687410.html

到了這里,關(guān)于Java單元測(cè)試及常用語句 | 京東物流技術(shù)團(tuán)隊(duì)的文章就介紹完了。如果您還想了解更多內(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)文章

  • 實(shí)戰(zhàn):工作中對(duì)并發(fā)問題的處理 | 京東物流技術(shù)團(tuán)隊(duì)

    實(shí)戰(zhàn):工作中對(duì)并發(fā)問題的處理 | 京東物流技術(shù)團(tuán)隊(duì)

    1. 問題背景 問題發(fā)生在快遞分揀的流程中,我盡可能將業(yè)務(wù)背景簡(jiǎn)化,讓大家只關(guān)注并發(fā)問題本身。 分揀業(yè)務(wù)針對(duì)每個(gè)快遞包裹都會(huì)生成一個(gè)任務(wù),我們稱它為 task。task 中有兩個(gè)字段需要關(guān)注,一個(gè)是分揀中發(fā)生的 異常(exp_type) ,另一個(gè)是分揀任務(wù)的 狀態(tài)(status) 。另

    2024年02月12日
    瀏覽(21)
  • 破局主鍵重復(fù)問題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì)

    破局主鍵重復(fù)問題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì)

    伴隨著業(yè)務(wù)的不斷發(fā)展,逐漸由單庫(kù)單表向分庫(kù)分表進(jìn)行發(fā)展。在這個(gè)過程中不可避免的一個(gè)問題是確保主鍵要的唯一性,以便于后續(xù)的數(shù)據(jù)聚合、分析等等場(chǎng)景的使用。在進(jìn)行分庫(kù)分表的解決方案中有多種技術(shù)選型,大概分為兩大類客戶端分庫(kù)分表、服務(wù)端分庫(kù)分表。例如

    2024年02月10日
    瀏覽(18)
  • 快速理解DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)架構(gòu)思想-基礎(chǔ)篇 | 京東物流技術(shù)團(tuán)隊(duì)

    快速理解DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)架構(gòu)思想-基礎(chǔ)篇 | 京東物流技術(shù)團(tuán)隊(duì)

    本文與大家一起學(xué)習(xí)并介紹領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domain Drive Design) 簡(jiǎn)稱DDD,以及為什么我們需要領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),它有哪些優(yōu)缺點(diǎn),盡量用一些通俗易懂文字來描述講解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),本篇并不會(huì)從深層大論述講解落地實(shí)現(xiàn),這些大家可以在了解入門后再去深層次學(xué)習(xí)探討或在后續(xù)進(jìn)階

    2024年02月09日
    瀏覽(26)
  • 庫(kù)存預(yù)占架構(gòu)升級(jí)方案設(shè)計(jì)-交易庫(kù)存中心 | 京東物流技術(shù)團(tuán)隊(duì)

    庫(kù)存預(yù)占架構(gòu)升級(jí)方案設(shè)計(jì)-交易庫(kù)存中心 | 京東物流技術(shù)團(tuán)隊(duì)

    伴隨物流行業(yè)的迅猛發(fā)展,一體化供應(yīng)鏈模式的落地,對(duì)系統(tǒng)吞吐、系統(tǒng)穩(wěn)定發(fā)出巨大挑戰(zhàn),庫(kù)存作為供應(yīng)鏈的重中之重表現(xiàn)更為明顯。近三年數(shù)據(jù)可以看出: 接入商家同比增長(zhǎng)37.64%、貨品種類同比增長(zhǎng)53.66% 貨品數(shù)量同比增長(zhǎng)46.43%、倉(cāng)庫(kù)數(shù)量同比增長(zhǎng)18.87% 通過分析過往大促

    2024年02月11日
    瀏覽(94)
  • 四層負(fù)載均衡的NAT模型與DR模型推導(dǎo) | 京東物流技術(shù)團(tuán)隊(duì)

    四層負(fù)載均衡的NAT模型與DR模型推導(dǎo) | 京東物流技術(shù)團(tuán)隊(duì)

    本文首先講述四層負(fù)載均衡技術(shù)的特點(diǎn),然后通過提問的方式推導(dǎo)出四層負(fù)載均衡器的NAT模型和DR模型的工作原理。通過本文可以了解到四層負(fù)載均衡的技術(shù)特點(diǎn)、NAT模型和DR模型的工作原理、以及NAT模型和DR模型的優(yōu)缺點(diǎn)。讀者可以重點(diǎn)關(guān)注NAT模型到DR模型演進(jìn)的原因(一種技

    2024年02月10日
    瀏覽(20)
  • SpringCloud-Hystrix服務(wù)熔斷與降級(jí)工作原理&源碼 | 京東物流技術(shù)團(tuán)隊(duì)

    SpringCloud-Hystrix服務(wù)熔斷與降級(jí)工作原理&源碼 | 京東物流技術(shù)團(tuán)隊(duì)

    在微服務(wù)架構(gòu)中,根據(jù)業(yè)務(wù)來拆分成一個(gè)個(gè)的服務(wù),服務(wù)與服務(wù)之間可以相互調(diào)用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign來調(diào)用。為了保證其高可用,單個(gè)服務(wù)通常會(huì)集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個(gè)服務(wù)出現(xiàn)問題,調(diào)用這

    2024年02月14日
    瀏覽(26)
  • CRM系統(tǒng)化整合從N-1做減法實(shí)踐 | 京東物流技術(shù)團(tuán)隊(duì)

    CRM系統(tǒng)化整合從N-1做減法實(shí)踐 | 京東物流技術(shù)團(tuán)隊(duì)

    京銷易系統(tǒng)已經(jīng)接入大網(wǎng)、KA以及云倉(cāng)三個(gè)條線商機(jī),每個(gè)條線商機(jī)規(guī)則差異比較大,當(dāng)前現(xiàn)狀是獨(dú)立實(shí)現(xiàn)三套系統(tǒng)分別做支撐。 2022年下半年CRM目標(biāo)是完成9個(gè)新條線業(yè)務(wù)接入,完成銷售過程線上化,實(shí)現(xiàn)銷售規(guī)則統(tǒng)一。 前端實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)與邏輯代碼耦合一起,無法復(fù)用,無

    2024年02月15日
    瀏覽(21)
  • 從iOS App啟動(dòng)速度看如何為基礎(chǔ)性能保駕護(hù)航 | 京東物流技術(shù)團(tuán)隊(duì)

    從iOS App啟動(dòng)速度看如何為基礎(chǔ)性能保駕護(hù)航 | 京東物流技術(shù)團(tuán)隊(duì)

    啟動(dòng)是App給用戶的第一印象,一款A(yù)pp的啟動(dòng)速度,不單單是用戶體驗(yàn)的事情,往往還決定了它能否獲取更多的用戶。所以到了一定階段App的啟動(dòng)優(yōu)化是必須要做的事情。App啟動(dòng)基本分為以下兩種 App 點(diǎn)擊啟動(dòng)前,它的進(jìn)程不在系統(tǒng)里,需要系統(tǒng)新創(chuàng)建一個(gè)進(jìn)程分配給它啟動(dòng)的

    2024年02月15日
    瀏覽(21)
  • Java單元測(cè)試及常用語句

    編寫Java單元測(cè)試用例,即把一段復(fù)雜的代碼拆解成一系列簡(jiǎn)單的單元測(cè)試用例,并且無需啟動(dòng)服務(wù),在短時(shí)間內(nèi)測(cè)試代碼中的處理邏輯。寫好Java單元測(cè)試用例,其實(shí)就是把“復(fù)雜問題簡(jiǎn)單化,建單問題深入化“。在編寫的過程中, 我們也可以對(duì)自己的代碼進(jìn)行一個(gè)二次檢查

    2024年02月10日
    瀏覽(13)
  • iOS 單元測(cè)試之常用框架 OCMock 詳解 | 京東云技術(shù)團(tuán)隊(duì)

    iOS 單元測(cè)試之常用框架 OCMock 詳解 | 京東云技術(shù)團(tuán)隊(duì)

    1.1 單元測(cè)試的必要性 測(cè)試驅(qū)動(dòng)開發(fā)并不是一個(gè)很新鮮的概念了。在日常開發(fā)中,很多時(shí)候需要測(cè)試,但是這種輸出是必須在點(diǎn)擊一系列按鈕之后才能在屏幕上顯示出來的東西。測(cè)試的時(shí)候,往往是用模擬器一次一次的從頭開始啟動(dòng) app,然后定位到自己所在模塊的程序,做一

    2024年02月09日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包