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

Java IDEA JUnit 單元測試

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

JUnit是一個開源的 Java 單元測試框架,它使得組織和運行測試代碼變得非常簡單,利用JUnit可以輕松地編寫和執(zhí)行單元測試,并且可以清楚地看到哪些測試成功,哪些失敗

JUnit 還提供了生成測試報告的功能,報告不僅包含測試的成功率,還能統(tǒng)計被測試代碼的覆蓋率。通過進行單元測試,我們可以確保每個方法按照預(yù)期正確運行。

如果我們修改了某個方法的代碼,只需要確保相應(yīng)的單元測試通過,就可以認為修改是正確的。此外,測試代碼本身也可以作為示例代碼,用于演示如何調(diào)用該方法。

幾乎所有的IDE工具都集成了JUnit,我們這里使用IDEA

參考?編寫JUnit測試 - 廖雪峰的官方網(wǎng)站 (liaoxuefeng.com)

目錄

編寫JUnit單元測試

使用Fixture自動執(zhí)行代碼

異常測試

條件測試

參數(shù)化測試

編寫JUnit單元測試

用遞推的方法寫一個計算n的階乘的Java方法。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

我們可以針對剛剛寫的Java編寫一個對應(yīng)的測試代碼對其進行測試,在IDEA中可以直接右擊點擊生成Junit測試。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

點擊確定生成一個FactorialTest.java文件。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

這是JUnit會把帶有@Test的方法識別為測試方法,因此需要給測試方法加上@Test注解,測試方法內(nèi)部用assertEquals(1, Factorial.fact(1))表示期望Factorial.fact(1)返回1。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

運行這個測試程序,JUnit就會給出成功的測試和失敗的測試,還可以生成測試報告,不僅包含測試的成功率,還可以統(tǒng)計測試的代碼覆蓋率,即被測試的代碼本身有多少經(jīng)過了測試。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

?Factorial.java

public class Factorial {
    public static long fact(long n) {
        long r = 1;
        for (long i = 1; i <= n; i++) {
            r = r * i;
        }
        return r;
    }
}

?FactorialTest.java

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

public class FactorialTest {

    @Test
    void testFact() {
        assertEquals(1, Factorial.fact(1));
        assertEquals(2, Factorial.fact(2));
        assertEquals(6, Factorial.fact(3));
        assertEquals(3628800, Factorial.fact(10));
        assertEquals(2432902008176640000L, Factorial.fact(20));
    }

}

使用Fixture自動執(zhí)行代碼

Fixture是JUnit提供的編寫測試前準備、測試后清理的固定代碼,可以用于測試前和測試后自動執(zhí)行代碼。

先編寫一個簡單的實現(xiàn)加減法功能的Calculator代碼。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

但是測試的時候,需要先初始化對象,可以使用@BeforeEach和@AfterEach標(biāo)記的方法,@BeforeEach標(biāo)記的方法會在執(zhí)行每個@Test的方法之前調(diào)用,而@AfterEach標(biāo)記的方法會在執(zhí)行每個@Test的方法之后調(diào)用,這樣就可以通過@BeforeEach和@AfterEach標(biāo)記來自動實現(xiàn)對象的生成和銷毀。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

然后再編寫我們的測試代碼。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

運行測試代碼,可以看到測試結(jié)果。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

如果需要在所有@Test方法運行前后僅運行一次,那么可以使用@BeforeAll和@AfterAll對方法進行標(biāo)記。

?Calculator.java

public class Calculator {
    private long n = 0;

    public long add(long x) {
        n = n + x;
        return n;
    }

    public long sub(long x) {
        n = n - x;
        return n;
    }
}

?CalculatorTest.java

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;

public class CalculatorTest {

    Calculator calculator;

    @BeforeEach
    public void setUp() {
        this.calculator = new Calculator();
    }

    @AfterEach
    public void tearDown() {
        this.calculator = null;
    }

    @Test
    void testAdd() {
        assertEquals(100, this.calculator.add(100));
        assertEquals(150, this.calculator.add(50));
        assertEquals(130, this.calculator.add(-20));
    }

    @Test
    void testSub() {
        assertEquals(-100, this.calculator.sub(100));
        assertEquals(-150, this.calculator.sub(50));
        assertEquals(-130, this.calculator.sub(-20));
    }
}

異常測試

對于可能拋出的異常進行測試是測試的重要環(huán)節(jié),因此在編寫JUnit測試的時候,除了正常的輸入輸出,還要特別針對可能導(dǎo)致異常的情況進行測試。

在計算階乘的方法中增加對參數(shù)n的檢查,如果n為負數(shù),則直接拋出異常IllegalArgumentException。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

在測試代碼中,我們可以編寫一個@Test方法專門測試異常,JUnit提供assertThrows函數(shù)來期望捕獲一個指定的異常。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

運行測試代碼,可以看到測試結(jié)果。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

?Factorial.java

public class Factorial {
    public static long fact(long n) {
        if (n < 0) {
            throw new IllegalArgumentException();
        }
        long r = 1;
        for (long i = 1; i <= n; i++) {
            r = r * i;
        }
        return r;
    }
}

?FactorialTest.java

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

public class FactorialTest {

    @Test
    void testFact() {
        assertEquals(1, Factorial.fact(1));
        assertEquals(2, Factorial.fact(2));
        assertEquals(6, Factorial.fact(3));
        assertEquals(3628800, Factorial.fact(10));
        assertEquals(2432902008176640000L, Factorial.fact(20));
    }

    @Test
    void testNegative() {
        assertThrows(IllegalArgumentException.class, () -> {
            Factorial.fact(-1);
        });
    }
}

條件測試

條件測試可以在滿足某種條件下執(zhí)行某些測試方法,不執(zhí)行某些測試方法。

編寫一個程序,該程序中的方法在Windows上跑和在Linux上跑的代碼路徑不同。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

編寫測試代碼的時候,用@EnableOnOs標(biāo)記方法,指定只有在特定系統(tǒng)下才執(zhí)行該測試方法。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

用@DisabledOnOs標(biāo)記方法表示不在某個系統(tǒng)上執(zhí)行該方法。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

用@DisabledOnJre標(biāo)記方法表示只能在高于特定Java版本的測試。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

用@EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*")標(biāo)記,表示只能在64位操作系統(tǒng)上執(zhí)行的測試。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

用@EnabledIfEnvironmentVariable標(biāo)記方法表示需要傳入環(huán)境變量DEBUG=true才能執(zhí)行的測試。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

運行測試代碼,可以看到測試結(jié)果。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

?Config.java

public class Config {
    public String getConfigFile(String filename) {
        String os = System.getProperty("os.name").toLowerCase();
        if (os.contains("win")) {
            return "C:\\" + filename;
        }
        if (os.contains("mac") || os.contains("linux") || os.contains("unix")) {
            return "/usr/local/" + filename;
        }
        throw new UnsupportedOperationException();
    }
}

?ConfigTest.java

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.*;

public class ConfigTest {
    Config config;

    @BeforeEach
    public void setUp() {
        this.config = new Config();
    }

    @AfterEach
    public void tearDown() {
        this.config = null;
    }

    @Test
    @EnabledOnOs(OS.WINDOWS)
    void testWindows() {
        assertEquals("C:\\test.ini", config.getConfigFile("test.ini"));
    }

    @Test
    @EnabledOnOs({OS.LINUX, OS.MAC})
    void testLinuxAndMac() {
        assertEquals("/usr/local/test.cfg", config.getConfigFile("test.cfg"));
    }

    @Test
    @DisabledOnOs(OS.WINDOWS)
    void testOnNonWindowsOs() {
        // TODO: this test is disabled on windows
    }

    @Test
    @DisabledOnJre(JRE.JAVA_8)
    void testOnJava9OrAbove() {
        // TODO: this test is disabled on java 8
    }

    @Test
    @EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*")
    void testOnlyOn64bitSystem() {
        // TODO: this test is only run on 64 bit system
    }

    @Test
    @EnabledIfEnvironmentVariable(named = "DEBUG", matches = "true")
    void testOnlyOnDebugMode() {
        // TODO: this test is only run on DEBUG=true
    }
}

參數(shù)化測試

JUnit提供了一個@ParameterizedTest注解,用來進行參數(shù)化測試。參數(shù)化測試和普通測試稍微不同的地方在于,一個測試方法需要接收至少一個參數(shù),然后,傳入一組參數(shù)反復(fù)運行。

編寫一個方法,該方法把字符串的第一個字母變?yōu)榇髮?,后續(xù)字母變?yōu)樾憽?/p>

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

在編寫測試代碼的時候,需要給出輸入和預(yù)期輸出,可以通過@MethodSource注解,它允許我們編寫一個同名的靜態(tài)方法來提供測試參數(shù),編寫一個靜態(tài)方法testCapitalize返回了一組測試參數(shù),每個參數(shù)都包含兩個String,作為測試方法的兩個參數(shù)傳入。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

還可以使用@CsvSource標(biāo)記傳入測試參數(shù)的方法,它的每一個字符串表示一行,一行包含的若干參數(shù)用 , 分隔。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

如果測試數(shù)據(jù)很多,可以把測試數(shù)據(jù)提到一個獨立的CSV文件中,標(biāo)注上@CsvFileSource表示從CSV文件中讀取數(shù)據(jù)。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

由于JUnit只在classpath中查找指定的CSV文件,因此,test-capitalize.csv這個文件要放到src/main/resources目錄下,內(nèi)容格式如下圖所示。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

運行測試程序,測試結(jié)果如下圖所示。

Java IDEA JUnit 單元測試,Java程序設(shè)計,java,單元測試

?StringUtils.java

public class StringUtils {
    public static String capitalize(String s) {
        if (s.length() == 0) {
            return s;
        }
        return Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase();
    }
}

StringUtilsTest.java文章來源地址http://www.zghlxwxcb.cn/news/detail-769024.html

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;

import static org.junit.jupiter.api.Assertions.*;

public class StringUtilsTest {
//    @ParameterizedTest
//    @MethodSource
//    void testCapitalize(String input, String result) {
//        assertEquals(result, StringUtils.capitalize(input));
//    }
//
//    static List<Arguments> testCapitalize() {
//        return List.of( // arguments:
//                Arguments.of("abc", "Abc"), //
//                Arguments.of("APPLE", "Apple"), //
//                Arguments.of("gooD", "Good"));
//    }

//    @ParameterizedTest
//    @CsvSource({"abc, Abc", "APPLE, Apple", "gooD, Good"})
//    void testCapitalize(String input, String result) {
//        assertEquals(result, StringUtils.capitalize(input));
//    }
    @ParameterizedTest
    @CsvFileSource(resources = {"test_capitalize.csv"})
    void testCapitalizeUsingCsvFile(String input, String result) {
        assertEquals(result, StringUtils.capitalize(input));
    }
}

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

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

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

相關(guān)文章

  • Java單元測試淺析(JUnit+Mockito)

    Java單元測試淺析(JUnit+Mockito)

    Java測試我們應(yīng)該都遇到過,一般我們會被要求做單元測試,來驗證我們代碼的功能以及效率。 這里來和大家一起探討下有關(guān)單于測試。 是指對軟件中的最小可測試單元進行檢查和驗證。對于單元測試中單元的含義,一般來說,要根據(jù)實際情況去判定其具體含義,如C語言中單

    2024年02月06日
    瀏覽(50)
  • Java單元測試 JUnit 5 快速上手

    Java單元測試 JUnit 5 快速上手

    一、背景 什么是 JUnit 5?首先就得聊下 Java 單元測試框架 JUnit,它與另一個框架 TestNG 占據(jù)了 Java領(lǐng)域里單元測試框架的主要市場,其中 JUnit 有著較長的發(fā)展歷史和不斷演進的豐富功能,備受大多數(shù) Java 開發(fā)者的青睞。 而說到 JUnit 的歷史,JUnit 起源于 1997年,最初版本是由兩

    2024年02月11日
    瀏覽(25)
  • Java學(xué)習(xí)筆記——單元測試(JUnit框架)

    Java學(xué)習(xí)筆記——單元測試(JUnit框架)

    public class mathDemo { int area = 0; public int getArea(int a,int b){ area = a*b; return area; } } mathDemoTest類的代碼 package UnitDemo; import UnitDemo.mathDemo; import org.junit.*; import static org.junit.Assert.*; public class mathDemoTest { mathDemo m = new mathDemo(); @BeforeClass public static void setUpClass(){ System.out.println(“在當(dāng)前類的

    2024年04月26日
    瀏覽(29)
  • Java中的JUnit是什么?如何使用JUnit進行單元測試

    JUnit是Java中最流行的單元測試框架之一。它可以幫助開發(fā)人員在代碼編寫過程中檢測出錯誤和異常,從而提高代碼的質(zhì)量和可靠性。 JUnit是一個由Kent Beck和Erich Gamma創(chuàng)建的開源Java單元測試框架,它已經(jīng)成為Java開發(fā)中最常用的測試框架之一。這個框架的主要目的是為了簡化單元

    2024年02月12日
    瀏覽(34)
  • Java中的JUnit單元測試方法的使用

    選中當(dāng)前工程 - 右鍵選擇:build path - add libraries - JUnit 4 - 下一步 創(chuàng)建Java類,進行單元測試。 此時的Java類要求:① 此類是public的 ②此類提供公共的無參的構(gòu)造器 此類中聲明單元測試方法。 此時的單元測試方法:方法的權(quán)限是public,沒有返回值,沒有形參。 此單元測試方法上

    2024年02月14日
    瀏覽(33)
  • Java Junit單元測試(入門必看篇)

    Java Junit單元測試(入門必看篇)

    Hi i,m JinXiang ? 前言?? 本篇文章主要介紹單元測試工具Junit使用以及部分理論知識 ??歡迎點贊????收藏??留言評論???私信必回喲?? ??博主收將持續(xù)更新學(xué)習(xí)記錄獲,友友們有任何問題可以在評論區(qū)留言 ? JUnit 是一個 Java 編程語言的單元測試框架。JUnit 在測試驅(qū)動的

    2024年02月05日
    瀏覽(19)
  • JAVA:利用JUnit進行高效的單元測試

    JAVA:利用JUnit進行高效的單元測試

    1、簡述 在軟件開發(fā)中,單元測試是確保代碼質(zhì)量和可維護性的關(guān)鍵步驟。JUnit作為Java領(lǐng)域最流行的單元測試框架之一,提供了簡單而強大的測試工具,可以幫助開發(fā)者在項目開發(fā)過程中及時發(fā)現(xiàn)和修復(fù)代碼中的問題。本文將介紹JUnit的基本用法以及一些高效的單元測試技巧,

    2024年02月03日
    瀏覽(34)
  • 淺談java單元測試框架junit4/5

    淺談java單元測試框架junit4/5

    junit是一個開源的Java語言的單元測試框架。目前junit主要有版本junit3,junit4和junit5。因在junit3中,是通過對測試類和測試方法的命名來確定是否是測試,且所有的測試類必須繼承junit的測試基類TestCase,所以本文不再討論junit3,只討論使用比較多的junit4和junit5。 提供注解標(biāo)識測

    2024年02月03日
    瀏覽(25)
  • Java高級技術(shù) 單元測試(JUnit4)

    Java高級技術(shù) 單元測試(JUnit4)

    所謂單元測試,就是針對最小的功能單元,編寫測試代碼對其進行正確性測試。 我們之前一直使用的測試便是通過main方法來實現(xiàn),但在main方法中寫測試代碼有如下的幾個問題存在: 只能在main方法編寫測試代碼,去調(diào)用其他方法進行測試。 無法實現(xiàn)自動化測試,一個方法測

    2024年02月03日
    瀏覽(22)
  • test-01-java 單元測試框架 junit 入門介紹

    JUnit 是一個用于編寫可重復(fù)測試的簡單框架。 它是 xUnit 架構(gòu)的一種實例,專門用于單元測試框架。 What to test? Need Desc Right 結(jié)果是否正確 B 邊界條件是否滿足 I 能反向關(guān)聯(lián)嗎 C 有其他手段交叉檢查嗎 E 是否可以強制異常發(fā)生 P 性能問題 CalculatorTest 類包含了一個測試方法 test

    2024年02月04日
    瀏覽(41)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包