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

【JUnit技術專題】「入門到精通系列」手把手+零基礎帶你玩轉單元測試,讓你的代碼更加“強壯”(實戰(zhàn)開發(fā)篇)

這篇具有很好參考價值的文章主要介紹了【JUnit技術專題】「入門到精通系列」手把手+零基礎帶你玩轉單元測試,讓你的代碼更加“強壯”(實戰(zhàn)開發(fā)篇)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實戰(zhàn)開發(fā)篇

本節(jié)內容主要介紹JUnit單元測試功能框架,并以實戰(zhàn)演練的形式進行講解。本系列教程主要針對代碼編程方式和模型,重點講解實戰(zhàn)代碼開發(fā)。通過本系列教程的學習,您將能夠深入了解JUnit單元測試框架的使用和原理,并掌握如何在實際項目中運用JUnit進行單元測試。

創(chuàng)建Pojo模型

以下是一個使用JUnit對業(yè)務邏輯類和測試運行器中的測試類進行測試的示例。首先,我們需要創(chuàng)建一個名:EmployeeDetails.java的POJO類。

EmployeeDetails 類被用于

  • 取得或者設置雇員的姓名的值。
  • 取得或者設置雇員的每月薪水的值。
  • 取得或者設置雇員的年齡的值。
public class EmployeeDetails {
	private String name;
	private double monthlySalary;
	private int age;
	/**
	* @return the name
	*/
	public String getName() {
		return name;
	}
	/**
	* @param name the name to set
	*/
	public void setName(String name) {
		this.name = name;
	}
	/**
	* @return the monthlySalary
	*/
	public double getMonthlySalary() {
		return monthlySalary;
	}
	/**
	* @param monthlySalary the monthlySalary to set
	*/
	public void setMonthlySalary(double monthlySalary) {
		this.monthlySalary = monthlySalary;
	}
	/**
	* @return the age
	*/
	public int getAge() {
		return age;
	}
	/**
	* @param age the age to set
	*/
	public void setAge(int age) {
		this.age = age;
	}
}

EmpBusinessLogic 類被用來計算:

  • 雇員每年的薪水
  • 雇員的評估金額

創(chuàng)建一個名為 EmpBusinessLogic.java 的 business logic 類:

public class EmpBusinessLogic {
	// Calculate the yearly salary of employee
	public double calculateYearlySalary(EmployeeDetails employeeDetails){
		double yearlySalary=0;
		yearlySalary = employeeDetails.getMonthlySalary() * 12;
		return yearlySalary;
	}
	// Calculate the appraisal amount of employee
	public double calculateAppraisal(EmployeeDetails employeeDetails){
		double appraisal=0;
		if(employeeDetails.getMonthlySalary() < 10000){
			appraisal = 500;
		}else{
			appraisal = 1000;
		}
			return appraisal;
		}
	}
}

創(chuàng)建一個名為 TestEmployeeDetails.java 的準備被測試的測試案例類

import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestEmployeeDetails {
	EmpBusinessLogic empBusinessLogic =new EmpBusinessLogic();
	EmployeeDetails employee = new EmployeeDetails();
	//test to check appraisal
	@Test
	public void testCalculateAppriasal() {
	  employee.setName("Rajeev");
	  employee.setAge(25);
	  employee.setMonthlySalary(8000);
	  double appraisal= empBusinessLogic.calculateAppraisal(employee);
	  assertEquals(500, appraisal, 0.0);
	}
	// test to check yearly salary
	@Test
	public void testCalculateYearlySalary() {
	   employee.setName("Rajeev");
	   employee.setAge(25);
	   employee.setMonthlySalary(8000);
	   double salary= empBusinessLogic.calculateYearlySalary(employee);
	     assertEquals(96000, salary, 0.0);
	   }
	}

創(chuàng)建一個名為 TestRunner.java 的類來執(zhí)行測試案例類:

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
	Result result = JUnitCore.runClasses(TestEmployeeDetails.class);
	for (Failure failure : result.getFailures()) {
		System.out.println(failure.toString());
	}
	System.out.println(result.wasSuccessful());
	}
}

斷言操作

所有的斷言都包含在 Assert 類中

public class Assert extends java.lang.Object

該類提供了許多有用的斷言方法,可用于編寫測試用例。僅記錄失敗的斷言。以下是Assert類中一些有用的方法的示例:

序號 方法和描述
1 void assertEquals(boolean expected, boolean actual) 檢查兩個變量或者等式是否成立
2 void assertTrue(boolean expected, boolean actual) 檢查條件為真)
3 void assertFalse(boolean condition) 檢查條件為假
4 void assertNotNull(Object object) 檢查對象不為空
5 void assertNull(Object object) 檢查對象為空
6 void assertSame(boolean condition) assertSame() 方法檢查兩個相關對象是否指向同一個對象
7 void assertNotSame(boolean condition) assertNotSame() 方法檢查兩個相關對象是否不指向同一個對象
8 void assertArrayEquals(expectedArray, resultArray) assertArrayEquals() 方法檢查兩個數(shù)組是否相等

下面我們在例子中試驗一下上面提到的各種方法。創(chuàng)建一個文件名為 TestAssertions.java 的類

import org.junit.Test;
import static org.junit.Assert.*;
public class TestAssertions {
	@Test
	public void testAssertions() {
		//test data
		String str1 = new String ("abc");
		String str2 = new String ("abc");
		String str3 = null;
		String str4 = "abc";
		String str5 = "abc";
		int val1 = 5;
		int val2 = 6;
		String[] expectedArray = {"one", "two", "three"};
		String[] resultArray = {"one", "two", "three"};
		//Check that two objects are equal
		assertEquals(str1, str2);
		//Check that a condition is true
		assertTrue (val1 < val2);
		//Check that a condition is false
		assertFalse(val1 > val2);
		//Check that an object isn't null
		assertNotNull(str1);
		//Check that an object is null
		assertNull(str3);
		//Check if two object references point to the same object
		assertSame(str4,str5);
		//Check if two object references not point to the same object
		assertNotSame(str1,str3);
		//Check whether two arrays are equal to each other.
		assertArrayEquals(expectedArray, resultArray);
	}
}

接下來,創(chuàng)建一個文件名為 TestRunner.java 的類來執(zhí)行測試用例:

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner2 {
public static void main(String[] args) {
	Result result = JUnitCore.runClasses(TestAssertions.class);
	for (Failure failure : result.getFailures()) {
		System.out.println(failure.toString());
	}	
		System.out.println(result.wasSuccessful());
	}
}

注解Annotation

注解就好像你可以在你的代碼中添加并且在方法或者類中應用的元標簽。JUnit 中的這些注釋為我們提供了測試
方法的相關信息,哪些方法將會在測試方法前后應用,哪些方法將會在所有方法前后應用,哪些方法將會在執(zhí)行
中被忽略。

JUnit 中的注解的列表以及他們的含義:

序號 注釋和描述
1 @Test 這個注釋說明依附在 JUnit 的 public void 方法可以作為一個測試案例。
2 @Before 有些測試在運行前需要創(chuàng)造幾個相似的對象。在 public void 方法加該注釋是因為該方法需要在 test 方法前運行。
3 @After 如果你將外部資源在 Before 方法中分配,那么你需要在測試運行后釋放他們。在 public void 方法加該注釋是因為該方法需要在 test 方法后運行。
4 @BeforeClass 在 public void 方法加該注釋是因為該方法需要在類中所有方法前運行。
5 @AfterClass它將會使方法在所有測試結束后執(zhí)行。這個可以用來進行清理活動。
6 @Ignore這個注釋是用來忽略有關不需要執(zhí)行的測試的。

下創(chuàng)建一個文件名為 JunitAnnotation.java 的類來測試注釋

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class JunitAnnotation {
	//execute before class
	@BeforeClass
	public static void beforeClass() {
		System.out.println("in before class");
	}
	//execute after class
	@AfterClass
	public static void afterClass() {
		System.out.println("in after class");
	}
	//execute before test
	@Before
	public void before() {
		System.out.println("in before");
	}
	//execute after test
	@After
	public void after() {
		System.out.println("in after");
	}
	//test case
	@Test
	public void test() {
		System.out.println("in test");
	}
	//test case ignore and will not execute
	@Ignore
	public void ignoreTest() {
    	System.out.println("in ignore test");
    }
}

創(chuàng)建一個文件名為 TestRunner.java 的類來執(zhí)行注解

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
	Result result = JUnitCore.runClasses(JunitAnnotation.class);
		for (Failure failure : result.getFailures()) {
			System.out.println(failure.toString());
		}
		System.out.println(result.wasSuccessful());
	}
}

運行結果

in before class
in before
in test
in after
in after class
true

觀察以上的輸出,這是 JUnite 執(zhí)行過程:

  • beforeClass() 方法首先執(zhí)行,并且僅執(zhí)行一次。
  • afterClass() 方法最后執(zhí)行,并且僅執(zhí)行一次。
  • before() 方法在每個測試用例執(zhí)行之前執(zhí)行。
  • after() 方法在每個測試用例執(zhí)行之后執(zhí)行。
  • 在 before() 方法和 after() 方法之間,執(zhí)行每個測試用例。

JUnitCore 執(zhí)行測試

下面是 org.junit.runner.JUnitCore 類的聲明:

public class JUnitCore extends java.lang.Object

測試用例是使用 JUnitCore 類來執(zhí)行的。JUnitCore 是運行測試的外觀類。它支持運行 JUnit 4 測試。 要從命令行運行測試,可以運行 java org.junit.runner.JUnitCore 。對于只有一次的測試運行,可以使用靜態(tài)方法 runClasses(Class[])。

下節(jié)介紹

【JUnit技術專題】「入門到精通系列」手把手+零基礎帶你玩轉單元測試,讓你的代碼更加“強壯”(場景化測試篇)文章來源地址http://www.zghlxwxcb.cn/news/detail-769333.html

到了這里,關于【JUnit技術專題】「入門到精通系列」手把手+零基礎帶你玩轉單元測試,讓你的代碼更加“強壯”(實戰(zhàn)開發(fā)篇)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 手把手教你從入門到精通C# Modbus通信

    手把手教你從入門到精通C# Modbus通信

    在工業(yè)通信領域,Modbus通信是一種使用非常廣泛的通信協(xié)議,Modbus一般有三種,分別為ModbusRTU、ModbusASCII、ModbusTCP,其中ModbusRTU、ModbusASCII是應用于串行鏈路上的協(xié)議,通俗一點就是說它是走串口的,ModbusTCP通俗點說就是它是走網(wǎng)口的,作者在自動化領域耕耘多年,做過的Mo

    2024年02月14日
    瀏覽(105)
  • 手把手教你從入門到精通C# Socket通信

    手把手教你從入門到精通C# Socket通信

    Socket通信(包含Tcp/Udp通信)在工業(yè)領域用途非常廣泛,作者在自動化領域耕耘多年,做過的Tcp/Udp通信的項目大大小小也有幾百個,公司項目+兼職項目,可以說只要是Tcp/Udp的項目,沒有我做不了的,畢竟讓我徒手擼一個市面上你見到的Tcp/Udp調試助手對我而言也不在話下,比

    2024年03月17日
    瀏覽(95)
  • 【MySQL新手入門系列一】:手把手教你入門MySQL

    【MySQL新手入門系列一】:手把手教你入門MySQL

    如果您是一位剛剛開始學習MySQL的新手,本文將為您提供一些實用的入門知識和技巧,幫助您快速上手。 本篇文章將以windows為例,介紹MySQL的基礎知識,以及如何安裝、卸載、配置和使用它。 1.1 MySQL是什么 MySQL是一種開源的關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),它使用SQL(Struct

    2024年02月09日
    瀏覽(23)
  • 【Java技術專題】「Guava開發(fā)指南」手把手教你如何進行使用Guava工具箱進行開發(fā)系統(tǒng)實戰(zhàn)指南(基礎編程篇)

    Preconditions(前置條件):讓方法調用的前置條件判斷更簡單 。 Guava在Preconditions 類中提供了若干前置條件判斷的實用方法,我們強烈建議在 Eclipse 中靜態(tài)導入這些方法。每個方法都有三個變種: 當方法沒有額外參數(shù)時,拋出的異常中不包含錯誤消息,這會使得調用方很難確

    2024年02月07日
    瀏覽(95)
  • 【MySQL新手入門系列四】:手把手教你MySQL數(shù)據(jù)查詢由入門到學徒

    【MySQL新手入門系列四】:手把手教你MySQL數(shù)據(jù)查詢由入門到學徒

    SQL語言是與數(shù)據(jù)庫交互的機制,是關系型數(shù)據(jù)庫的標準語言。SQL語言可以用于創(chuàng)建、修改和查詢關系數(shù)據(jù)庫。SQL的SELECT語句是最重要的命令之一,用于從指定表中查詢數(shù)據(jù)。在此博客中,我們將進一步了解SELECT語句以及WHERE子句以及它們的重要性。 前面我們已經(jīng)大致講了一下

    2024年02月10日
    瀏覽(24)
  • 【MySQL新手入門系列二】:手把手教你入門MySQL - 數(shù)據(jù)庫及數(shù)據(jù)表操作

    【MySQL新手入門系列二】:手把手教你入門MySQL - 數(shù)據(jù)庫及數(shù)據(jù)表操作

    如果您是一位剛剛開始學習MySQL的新手,本文將為您提供一些實用的入門知識和技巧,幫助您快速上手。 【MySQL新手入門系列一】:手把手教你入門MySQL 前面我們已經(jīng)大致講了一下mysql的安裝等介紹,本篇文章將以windows為例,介紹MySQL的數(shù)據(jù)庫及數(shù)據(jù)表的操作(增刪改查)。

    2024年02月10日
    瀏覽(80)
  • 手把手入門三菱PLC FX2N系列(一)安裝GX works2 、 連接PLC、基本操作

    手把手入門三菱PLC FX2N系列(一)安裝GX works2 、 連接PLC、基本操作

    鏈接:https://pan.baidu.com/s/1DRvcwij-R4xU9vyDepds6w 提取碼:8888 序列號,下圖隨便輸一個,若不可用建議度娘 下載解壓后,全程點擊“確定”,“下一步”,“允許”,“是”即可完成安裝 如果沒有端口號的顯示,請安裝串口驅動,百度CH340即可 依次點擊#

    2024年02月08日
    瀏覽(320)
  • 手把手教你使用ADI的音頻DSP:ADAU1788的濾波器專題2

    手把手教你使用ADI的音頻DSP:ADAU1788的濾波器專題2

    作者的話 ADAU1788是ADAU1787的閹割版,他們同內核,都有SigmaDSP和FastDSP,模擬到模擬的延時都是5us,只不過1788只有2進2出,1787卻有4進2出。這個系列我就來說一說這顆ADAU1788的硬件和軟件都應該怎么做設計。 OP我是把ADI所有型號的DSP全部都做過,對就是所有型號。所以后面每個型

    2024年01月17日
    瀏覽(18)
  • 手把手教你使用ADI的音頻DSP:ADAU1788的濾波器專題1

    手把手教你使用ADI的音頻DSP:ADAU1788的濾波器專題1

    作者的話 ADAU1788是ADAU1787的閹割版,他們同內核,都有SigmaDSP和FastDSP,模擬到模擬的延時都是5us,只不過1788只有2進2出,1787卻有4進2出。這個系列我就來說一說這顆ADAU1788的硬件和軟件都應該怎么做設計。 OP我是把ADI所有型號的DSP全部都做過,對就是所有型號。所以后面每個型

    2024年01月19日
    瀏覽(50)
  • 探索C++賦值運算符重載的內部機制:手把手教你精通

    探索C++賦值運算符重載的內部機制:手把手教你精通

    W...Y的主頁 ?? 代碼倉庫分享??? ??前言: 前一篇博客中我們已經(jīng)了解并學習了初始化和清理模塊中的構造函數(shù)與析構函數(shù),還有拷貝復制中的拷貝復制函數(shù),它們都是類與對象中重要的成員,今天我們要來講一下拷貝復制模塊中另一個非常重要的內容——賦值重載,但是

    2024年02月08日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包