除了昨天提到的,我們可以透過評斷演算法的優劣來確保專案的程式碼品質,另外,還有一個很重要的方法,那就是測試。
在加入現在的公司之前,我其實並沒有編寫測試的習慣,但加入公司之後,才發現,哇! 原來,測試在軟體工程中是多麼的重要,除了可以確保你的程式碼功能執行是不是像你的預期之外,好的測試還可以幫你發現演算法的邏輯盲點。
近年來測試的重要性也被各大公司所提倡,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/
安裝完成之後可以在左方目錄按右鍵看看是否安裝成功。
來撰寫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訊息囉。
是不是很奇妙也很方便呢~~~
以上就是今天的內容。
Hi, I am Grant.
個人部落格 - https://grantliblog.wordpress.com/
個人網站 - https://grantli-website.netlify.app/#/mainpage
我的寫作專題 - https://vocus.cc/user/5af2e9b5fd89780001822db4#