最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Boolean引發(fā)缺陷的解決

 更新時間:2023年06月02日 10:03:34   作者:軟件質(zhì)量保障  
本文主要介紹了Java中Boolean引發(fā)缺陷的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

最近在項目測試中,發(fā)現(xiàn)一個由Boolean引發(fā)的缺陷,主要是覺得這個問題比較有意思,而且code review過程也不太容易發(fā)現(xiàn),缺陷本質(zhì)上歸類于契約問題。

問題描述

應(yīng)用A與應(yīng)用B之間存在調(diào)用關(guān)系,即B提供接口給A調(diào)用。A-B之間的契約存在一個參數(shù)類型是布爾類型。此參數(shù)業(yè)務(wù)場景是只有在特定情況下會傳值true,其他業(yè)務(wù)場景A會傳默認(rèn)值false。

由于此前溝通存在分歧,B側(cè)開發(fā)同學(xué)在定義契約時候此參數(shù)使用了Boolean,而非boolean類型。詭異的是開發(fā)在聯(lián)調(diào)過程由于正常傳值沒發(fā)現(xiàn)問題,在提測后測試測試異常場景才發(fā)現(xiàn)這個問題。

介紹具體缺陷之前,我們先了解下Boolean與boolean的區(qū)別。

Boolean與boolean的區(qū)別

Java 在java.lang包中提供了Boolean類。Boolean將原始類型 boolean 的值包裝在一個對象中。布爾類型的對象包含一個類型為布爾值的字段。此外,此類還提供了一些有用的方法,例如在處理布爾變量時將布爾值轉(zhuǎn)換為字符串以及將字符串轉(zhuǎn)換為布爾值。

Boolean 類提供了兩個用于創(chuàng)建 Boolean 對象的構(gòu)造函數(shù)。

Boolean b = newBoolean(boolean value);
Boolean b = newBoolean(String s);

一個簡單的代碼示例:

// Java program to demonstrate parseBoolean() method
public class Test
{
    public static void main(String[] args)
    {
        // parsing different Strings
        boolean b1 = Boolean.parseBoolean("True");
        boolean b2 = Boolean.parseBoolean("TruE");
        boolean b3 = Boolean.parseBoolean("False");
        boolean b4 = Boolean.parseBoolean("FALSE");
        boolean b5 = Boolean.parseBoolean("qualityassurance");
        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);
        System.out.println(b4);
        System.out.println(b5);
    }
}
?
true
true
false
false
false

在Java編程語言中,Boolean與boolean都是布爾類型的數(shù)據(jù)。但是它們之間有一些區(qū)別:

1. Boolean是一個類,而boolean是一個原始數(shù)據(jù)類型。Boolean類型的變量在初始化之前可以為null,而boolean類型的變量不能。

2. Boolean類型提供了一些方法,例如valueOf()和parseBoolean()等,以便對其進行操作。但是,boolean類型沒有這些方法,因為它是原始類型。

3. Boolean類型通常用于需要在對象中存儲布爾值的情況下,而boolean類型通常用于本地變量和數(shù)組等原始數(shù)據(jù)類型的情況。

4. 在自動裝箱和拆箱方面,兩者也有所不同。Boolean類型可以自動裝箱和拆箱,而boolean類型只能在Java 5或更高版本中進行自動裝箱和拆箱。

缺陷還原

舉例比較簡單,當(dāng)然實際業(yè)務(wù)邏輯要復(fù)雜很多。

定義一個Payment類,其中包含Boolean類型的屬性,用于區(qū)分此筆支付是否支持打折扣。

import lombok.Data;
/**
 * @author qualityassurance
 * @version Payment.java, v 0.1 2023年03月19日 15:52
 */
@Data
public class Payment {
    /**
     * 支付金額
     */
    private int amount;
    /**
     * 是否可以用折扣
     */
    private Boolean isDiscount;
}

實現(xiàn)一個函數(shù)(API),功能是如果此筆交易支持打折扣,則交易價格減半,否則計算原價。

public class DiscountFunction {
?
    public int  calculateAmount(Payment payment){
        /**
         * 若isDiscount=true,則價格砍半
         */
        if (payment.getIsDiscount().booleanValue()){
            return payment.getAmount()/2;
        }
        return payment.getAmount();
    }
}

測試類,實現(xiàn)兩個case,分別是打折扣的場景和不打折扣的場景。

public class DiscountFunctionTest {
?
    /**
     * 若isDiscount=true,則價格砍半
     */
    @Test
    public void isDiscountTest(){
        Payment payment = new Payment();
        payment.setAmount(1000);
        payment.setIsDiscount(true);
        DiscountFunction discountFunction = new DiscountFunction();
        int amount = discountFunction.calculateAmount(payment);
        Assert.assertEquals(payment.getAmount()/2, amount);
    }
?
    /**
     * 若isDiscount=false,則價格不變
     */
    @Test
    public void isNotDiscountTest(){
        Payment payment = new Payment();
        payment.setAmount(1000);
        DiscountFunction discountFunction = new DiscountFunction();
        int amount = discountFunction.calculateAmount(payment);
        Assert.assertEquals(payment.getAmount(), amount);
    }
}

運行結(jié)果:

可以看到isNotDiscountTest用例執(zhí)行過程報了NPE,分析代碼得知在下圖那里報的,完美復(fù)現(xiàn)我在測試過程中的發(fā)現(xiàn)的缺陷。

修復(fù)方案:

1. 將Payment類的屬性isDiscount類型改為小布爾boolean。

2. 在使用大布爾類型時,代碼的判斷邏輯要增加判Null。

缺陷分析:

分享這個缺陷主要是為了提醒大家在看到大布爾Boolean的時候,一定要重點關(guān)注if判定條件開發(fā)是否考慮的全面,最好是形成這樣的條件反射。

到此這篇關(guān)于Java中Boolean引發(fā)缺陷的解決的文章就介紹到這了,更多相關(guān)Java Boolean缺陷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解讀@Transactional失效的幾種情況

    解讀@Transactional失效的幾種情況

    這篇文章主要介紹了@Transactional失效的幾種情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java的靜態(tài)方法Arrays.asList()使用指南

    Java的靜態(tài)方法Arrays.asList()使用指南

    Arrays.asList() 是一個 Java 的靜態(tài)方法,它可以把一個數(shù)組或者多個參數(shù)轉(zhuǎn)換成一個 List 集合,這個方法可以作為數(shù)組和集合之間的橋梁,方便我們使用集合的一些方法和特性,本文將介紹 Arrays.asList() 的語法、應(yīng)用場景、坑點和總結(jié)
    2023-09-09
  • 使用Scala生成隨機數(shù)的方法示例

    使用Scala生成隨機數(shù)的方法示例

    這篇文章主要介紹了使用Scala生成隨機數(shù)的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Spring中過濾器和攔截器的區(qū)別及具體實現(xiàn)方式

    Spring中過濾器和攔截器的區(qū)別及具體實現(xiàn)方式

    在Spring框架中,和都是用于處理 HTTP 請求的中間件,但它們在作用范圍、實現(xiàn)方式和生命周期上有顯著區(qū)別,本文給大家介紹Spring中過濾器和攔截器的區(qū)別及具體實現(xiàn),感興趣的朋友一起看看吧
    2025-07-07
  • Java實現(xiàn)簡單無界面五子棋

    Java實現(xiàn)簡單無界面五子棋

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單無界面五子棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java 按行讀取文件并輸出到控制臺的方法

    java 按行讀取文件并輸出到控制臺的方法

    今天小編就為大家分享一篇java 按行讀取文件并輸出到控制臺的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Java使用snmp協(xié)議實現(xiàn)采集服務(wù)器信息

    Java使用snmp協(xié)議實現(xiàn)采集服務(wù)器信息

    SNMP是一種用于管理網(wǎng)絡(luò)設(shè)備的協(xié)議,它是一種標(biāo)準(zhǔn)化的協(xié)議,被用于監(jiān)控和管理網(wǎng)絡(luò)設(shè)備,這篇文章主要介紹了Java如何使用snmp協(xié)議采集服務(wù)器信息,需要的可以參考下
    2024-12-12
  • SpringBoot的ResponseEntity類返回給前端具體講解

    SpringBoot的ResponseEntity類返回給前端具體講解

    這篇文章主要給大家介紹了關(guān)于SpringBoot的ResponseEntity類返回給前端的相關(guān)資料,ResponseEntity是Spring框架中用于封裝HTTP響應(yīng)的類,可以自定義狀態(tài)碼、響應(yīng)頭和響應(yīng)體,常用于控制器方法中返回特定數(shù)據(jù)的HTTP響應(yīng),需要的朋友可以參考下
    2024-11-11
  • SpringSecurity+jwt+captcha登錄認(rèn)證授權(quán)流程總結(jié)

    SpringSecurity+jwt+captcha登錄認(rèn)證授權(quán)流程總結(jié)

    本文介紹了SpringSecurity、JWT和驗證碼在Spring Boot 3.2.0中的應(yīng)用,包括登錄認(rèn)證和授權(quán)流程的詳細步驟,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Java中BufferedReader和BufferedWriter使用方式

    Java中BufferedReader和BufferedWriter使用方式

    這篇文章主要介紹了Java中BufferedReader和BufferedWriter使用方式,F(xiàn)ileWriter?類從?OutputStreamWriter?類繼承而來,BufferedReader?類從字符輸入流中讀取文本并緩沖字符,以便有效地讀取字符,數(shù)組和行
    2022-06-06

最新評論

江山市| 含山县| 麻阳| 广宁县| 雅江县| 武平县| 新乡县| 偃师市| 社旗县| 弋阳县| 岑巩县| 龙泉市| 新余市| 义马市| 马关县| 塘沽区| 德惠市| 永清县| 孟津县| 泉州市| 卫辉市| 克什克腾旗| 宽甸| 汤阴县| 鹤山市| 莒南县| 喜德县| 石首市| 靖州| 潮州市| 聂拉木县| 虞城县| 昌江| 平舆县| 阿克陶县| 高碑店市| 兴业县| 阿拉善左旗| 普兰县| 开原市| 蓝山县|