iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
0

除了昨天提到的,我們可以透過評斷演算法的優劣來確保專案的程式碼品質,另外,還有一個很重要的方法,那就是測試。

在加入現在的公司之前,我其實並沒有編寫測試的習慣,但加入公司之後,才發現,哇! 原來,測試在軟體工程中是多麼的重要,除了可以確保你的程式碼功能執行是不是像你的預期之外,好的測試還可以幫你發現演算法的邏輯盲點。

近年來測試的重要性也被各大公司所提倡,TDD(Test-Driven Development)這種開發流程也在許多公司被領導者所重視,TDD(Test-Driven Development)是一種開發流程,中文是「測試驅動開發」。用一句白話形容,就是「先寫測試再開發」。先寫測試除了能確保測試程式的撰寫,還有一個好處:有助於在開發初期釐清程式架構如何設計。

詳細介紹可以參考這篇: https://tw.alphacamp.co/blog/tdd-test-driven-development-example

而我們今天要使用TestNG這個測試的library來幫助我們進行測試。
這邊以Eclipse IDE作為示範,如何安裝可以參考下面這篇文章喔,我就不再花時間贅述了~
https://www.toolsqa.com/testng/install-testng/

安裝完成之後可以在左方目錄按右鍵看看是否安裝成功。
https://ithelp.ithome.com.tw/upload/images/20201009/20128925MM0yyNQ0kl.png

來撰寫TEST囉~~
以twoSum這個method為例,我們想要看看是否結果如我們預期,而測試的用意就是,給它輸入,透過比對輸出是否與期待值相同來判斷測試是否通過。
這個method流程是,尋找陣列中是否有兩個索引值總和等於使用者輸入的target value。

public class Homework7_1_2 {
	public static int[] twoSum(int[] arr, int target) {
		for(int i=0; i< arr.length; i++) {
			for(int j=i+1; j<arr.length; j++) {
				if((arr[i] + arr[j])==target) {
					return new int[] { i, j };
				}
			}
		}
		return null;
	}
}

我們可以撰寫如下的測試。
透過Assert(斷言),我們可以判斷結果是否與我們預期的相同,而所謂斷言(Assertion),指的是程式進行到某個時間點,斷定其必然是某種狀態,具體而言,也就是斷定該時間點上,某變數必然是某值,或某物件必具擁有何種特性值。
而以下例子中,target = 26,而陣列中的索引4與5的值之和剛好等於26,因此回傳一個整數陣列{4,5}。

Assert.assertEquals(實際值,期待值)
當兩邊內容等於,代表測試通過。

import org.testng.Assert;
import org.testng.annotations.Test;
import Week7.Homework7_1_2;

public class Homework7_1_2Test {
  @Test
  public void twoSumTest() {
	 int target = 26;
     int[] input = {5, 8, 9, 3, 6, 20};
     int[] answer = {4, 5};
     Assert.assertEquals(Homework7_1_2.twoSum(input, target), answer);
  }
}

如果Testcase成功,就會看到下方控制台印出PASS訊息囉。
https://ithelp.ithome.com.tw/upload/images/20201009/20128925ZR1ePQTxIm.png

是不是很奇妙也很方便呢~~~
以上就是今天的內容。


Hi, I am Grant.

個人部落格 - https://grantliblog.wordpress.com/
個人網站 - https://grantli-website.netlify.app/#/mainpage
我的寫作專題 - https://vocus.cc/user/5af2e9b5fd89780001822db4#


上一篇
Day25 - 演算法與複雜度
下一篇
Day27 - 測試的種類
系列文
30天手把手帶你跟JAVA變成好朋友 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言