Junit框架:
Junit是開(kāi)源的java單元測(cè)試框架。
今天我們來(lái)介紹junit5,junit5由三個(gè)不同的子專案模組組成,包括Junit Platform、Junit Jupiter和Junit Vintage。它支援Java8以及以上版本,編輯器我在這裡使用的是IntelliJ IDEA,只需要查看最後結(jié)果,就知道整個(gè)專案的方法介面是否通暢。每個(gè)單元測(cè)試用例相對(duì)獨(dú)立,由Junit 啟動(dòng),自動(dòng)呼叫。不需要新增額外的呼叫語(yǔ)句。
添加,刪除,屏蔽測(cè)試方法,不影響其他的測(cè)試方法。
Junit主要用於做白盒測(cè)試,白盒測(cè)試操作步驟如下:
1、測(cè)試計(jì)畫階段:根據(jù)需求說(shuō)明書,制定測(cè)試進(jìn)度。
2、測(cè)試設(shè)計(jì)階段:根據(jù)程式碼的功能,手動(dòng)設(shè)計(jì)測(cè)試案例進(jìn)行基本功能測(cè)試。依據(jù)程式設(shè)計(jì)說(shuō)明書,依照一定規(guī)範(fàn)化的方法進(jìn)行軟體結(jié)構(gòu)劃分和設(shè)計(jì)測(cè)試案例。
3、測(cè)試執(zhí)行階段:輸入測(cè)試案例,得到測(cè)試結(jié)果。
4、測(cè)試總結(jié)階段:對(duì)比測(cè)試的結(jié)果和程式碼的預(yù)期結(jié)果,分析錯(cuò)誤原因,找到並解決錯(cuò)誤。
接下來(lái)我們介紹裡面的註解:
@Test:表示測(cè)試方法,不用宣告任何屬性。
@ParameterizedTest:表示方法是測(cè)試方法,此外註解還可以讓一個(gè)測(cè)試方法使用不同的人參與多次運(yùn)行。
@RepeatedTest:此註解可讓測(cè)試方法自訂重複執(zhí)行次數(shù)。
@TestFactory:表示一個(gè)方法是基於資料驅(qū)動(dòng)的動(dòng)態(tài)測(cè)試資料來(lái)源。
@Displayname:宣告測(cè)試類別或測(cè)試方法的自訂顯示名稱。
@BeforeEach:表示在每一個(gè)測(cè)試方法運(yùn)行前,都執(zhí)行該指定方法。
@AfterEach:表示在每一個(gè)測(cè)試方法運(yùn)行後,都執(zhí)行該指定方法。
@BeforeAll:在目前類別的所有測(cè)試方法之前執(zhí)行,此方法可以包含一些初始化程式碼。
@AfterAll:在目前類別的所有測(cè)試方法之後執(zhí)行。
@Disabled:註明一個(gè)測(cè)試類別或方法無(wú)效。
斷言:
Fail:斷言測(cè)試失敗。
AssertTrue/asserFalse:斷言真或假。
AssertNull/assertNotNull:斷言為空或不為空。
assertEquals/assertNotEquals:斷言兩個(gè)值相不相等。
AssertArrayEquals:斷言陣列元素全部相同。
AssertSame/assertNotSame:斷言兩個(gè)物件是否相同。
AssertThrows/assertDoesNotThrow:斷言是否拋出例外。
AssertAll:斷言多個(gè)條件均滿足;
下面我們建立一個(gè)類,建立幾個(gè)方法:
package test;//包機(jī)制 import java.lang.reflect.Array; public class MixedOperation { public int mixeOperation(int x,int y){ return division((x+y),y); } public int division(int x,int y){ int result=(x/y); return result; } public static void main(String[] args) { MixedOperation mixedOperation=new MixedOperation(); System.out.println(mixedOperation.mixeOperation(5,1)); } }
我們建立了一個(gè)名為MixedOperation的類別;
package test; import org.junit.jupiter.api.*; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; public class MixedOperationTest { private MixedOperation mixedOperation; @BeforeEach public void init(){ mixedOperation=new MixedOperation(); } @Test public void successTest(){ System.out.println("run a test:x=4,y=2"); int result=mixedOperation.mixeOperation(4,2); Assertions.assertEquals(3,result); } /* @DisplayName("失敗") public void errorTest(){` System.out.println("run a test:x=4,y=0"); ArithmeticException exception=new ArithmeticException( ArithmeticException.class -> { mixedOperation.mixeOperation(4, 0); } ); }*/ @Disabled("參數(shù)") @Test @DisplayName("參數(shù)") @ParameterizedTest @CsvSource({"6,3,3","5,2,3","6,2,4"}) public void caTest(int x,int y,int excepted){ System.out.println("run a test :x="+x+"y="+y); System.out.println(excepted); int t= mixedOperation.mixeOperation(x,y); Assertions.assertEquals(excepted,t); } @Disabled @Test public void Next(){ System.out.println("拋出一個(gè)異常"); System.out.println(Assertions.assertThrows(IllegalArgumentException.class, () ->mixedOperation.mixeOperation(2,0))); } @Disabled @Test void error(){ Assertions.assertThrows(Exception.class,()->{Assertions.assertEquals(1,0);}); } @Test void sure(){ int result=mixedOperation.mixeOperation(4,2); Assertions.assertTrue(3==result);//斷言相等 } }
這是我們創(chuàng)建一個(gè)名為MixedOperationTest的測(cè)試類別;
?相關(guān)推薦:《java影片教學(xué)》
以上是白盒測(cè)試框架(JUnit)的使用的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

JUnit單元測(cè)試框架是一個(gè)廣泛使用的工具,主要優(yōu)點(diǎn)包括自動(dòng)化測(cè)試、快速回饋、提高程式碼品質(zhì)和可移植性。但它也有局限性,包括範(fàn)圍有限、維護(hù)成本、依賴性、記憶體消耗和缺乏持續(xù)整合支援。對(duì)於Java應(yīng)用程式的單元測(cè)試,JUnit是一個(gè)強(qiáng)大的框架,提供了許多好處,但使用時(shí)需要考慮其限制。

JUnit框架中的註解用於聲明和配置測(cè)試方法,主要註解包括:@Test(聲明測(cè)試方法)、@Before(測(cè)試方法執(zhí)行前運(yùn)行的方法)、@After(測(cè)試方法執(zhí)行後運(yùn)行的方法)、@ BeforeClass(所有測(cè)試方法執(zhí)行前運(yùn)行的方法)、@AfterClass(所有測(cè)試方法執(zhí)行後運(yùn)行的方法),這些註解有助於組織和簡(jiǎn)化測(cè)試程式碼,並透過(guò)提供明確的意圖和配置來(lái)提高測(cè)試程式碼的可讀性和可維護(hù)性。

JUnit是Java的單元測(cè)試框架,提供了簡(jiǎn)潔的工具來(lái)測(cè)試應(yīng)用程式元件。安裝依賴項(xiàng)後,可透過(guò)編寫一個(gè)包含@Test註解的單元測(cè)試類別來(lái)測(cè)試一個(gè)類,並使用assertEquals等斷言方法驗(yàn)證預(yù)期值和實(shí)際值。 JUnit提供了許多功能,例如準(zhǔn)備方法、失敗訊息和逾時(shí)機(jī)制。

在多執(zhí)行緒環(huán)境中使用JUnit時(shí),有兩種常見(jiàn)方法:?jiǎn)螆?zhí)行緒測(cè)試和多執(zhí)行緒測(cè)試。單執(zhí)行緒測(cè)試在主執(zhí)行緒上運(yùn)行,避免並發(fā)問(wèn)題,而多執(zhí)行緒測(cè)試在工作執(zhí)行緒上運(yùn)行,需要同步測(cè)試方法來(lái)確保共享資源不受干擾。常見(jiàn)使用案例包括測(cè)試多執(zhí)行緒安全方法,例如使用ConcurrentHashMap儲(chǔ)存鍵值對(duì),並發(fā)執(zhí)行緒對(duì)鍵值對(duì)進(jìn)行操作並驗(yàn)證其正確性,體現(xiàn)了多執(zhí)行緒環(huán)境中JUnit的應(yīng)用。

JUnit是Spring專案中廣泛使用的Java單元測(cè)試框架,可透過(guò)以下步驟應(yīng)用:新增JUnit依賴項(xiàng):org.junit.jupiterjunit-jupiter5.8.1test編寫測(cè)試案例:使用@ExtendWith(SpringExtension.class)啟用擴(kuò)展,使用@Autowired注入Bean,使用@BeforeEach和@AfterEach準(zhǔn)備和清理,用@Test標(biāo)記測(cè)試方法。

JUnit單元測(cè)試框架可以有效解決常見(jiàn)的記憶體洩漏問(wèn)題。常見(jiàn)的洩漏問(wèn)題包括持久靜態(tài)變數(shù)參考和未關(guān)閉資源。 JUnit提供了洩漏偵測(cè)器和分析記憶體佔(zhàn)用情況的工具來(lái)定位洩漏源。解決方法包括使用局部變數(shù)、弱引用、正確關(guān)閉資源和採(cǎi)用try-with-resources語(yǔ)句。透過(guò)遵循這些指南,開(kāi)發(fā)人員可以創(chuàng)建可靠且穩(wěn)定的JUnit測(cè)試環(huán)境。

遵循JUnit單元測(cè)試框架的最佳實(shí)踐可實(shí)現(xiàn)有效的程式碼驗(yàn)證:編寫?yīng)毩⒌臏y(cè)試將測(cè)試放在適當(dāng)?shù)奈恢檬褂脭嘌悦髦堑仳?yàn)證結(jié)果遵循命名約定(test開(kāi)頭)編寫負(fù)面測(cè)試使用Mocking和Stubbing隔離依賴項(xiàng)避免使用靜態(tài)變數(shù)刪除重複程式碼自動(dòng)化測(cè)試執(zhí)行

在JUnit中,可以透過(guò)以下步驟在偵錯(cuò)模式下執(zhí)行測(cè)試案例:使用@RunWith註解關(guān)聯(lián)BlockJUnit4ClassRunner運(yùn)行器。設(shè)定斷點(diǎn)以暫停執(zhí)行並檢查變數(shù)。使用System.out.println()輸出資訊以追蹤程式碼執(zhí)行。使用JUnitAssert斷言方法驗(yàn)證預(yù)期值和實(shí)際值。
