單元測試應該是開發(fā)人員必備的技能,但又是開發(fā)人員容易忽略的內(nèi)容。我是一個Android Coder,接下來從零開始學習使用JUnit進行單元測試。
1、原始的寫法
1.1、準備
創(chuàng)建一個文件夾作為工作文件夾。
1.2、下載
這里我們需要下載兩個東西:
junit.jar
hamcrest-core.jar
我這里下載了4.12版本的JUnit和1.3版本的hamcrest。下載完成之后,拷貝到工作文件夾。
1.3、編寫Java類
在工作文件夾創(chuàng)建編寫Java類。
import java.lang.String;
import java.lang.Integer;
public class Calculate{
public int evaluate(String expression) {
int sum = 0;
for (String summand: expression.split("\+"))
sum += Integer.valueOf(summand);
return sum;
}
}
然后通過Java命令行編譯該類:
javac Calculate.java
1.4、編寫測試類
在工作文件夾創(chuàng)建編寫測試類
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class CalculateTest {
@Test
public void evaluatesExpression() {
Calculate calculate = new Calculate();
int sum = calculate.evaluate("1+2+3");
assertEquals(6, sum);
}
}
然后使用命令行編譯該類:
javac -cp .:junit-4.12.jar CalculateTest.java
1.5、運行測試
使用命令行:
java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore CalculateTest
結(jié)果:
JUnit version 4.12
.
Time: 0.004
OK (1 test)
1.6、測試失敗的情況
更改Java類為:
import java.lang.String;
import java.lang.Integer;
public class Calculate{
public int evaluate(String expression) {
int sum = 0;
for (String summand: expression.split("\+"))
sum -= Integer.valueOf(summand); //這里改為-
return sum;
}
}
重新編譯,運行測試。結(jié)果:
JUnit version 4.12
.E
Time: 0.009
There was 1 failure:
1) evaluatesExpression(CalculateTest)
java.lang.AssertionError: expected:<6> but was:<-6>
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.failNotEquals(Assert.java:834)
……
FAILURES!!!
Tests run: 1, Failures: 1
基礎(chǔ)的用法完成Java的單元測試。我們進行單元測試肯定不會這么麻煩。但是要知道,我們使用任何框架或者編輯器,他們在背后做的事情大概也是這些。那接下來,仍然手工來做一個使用Gradle構(gòu)建的Java工程的測試寫法。
2、對使用Gradle構(gòu)建的Java項目進行單元測試
2.1、使用Gradle構(gòu)建Java工程
估計,即使是使用過Gradle構(gòu)建的人,也很少有人手動使用grad
2.1.1、準備
仍然是創(chuàng)建一個文件夾作為我們的工程文件夾。
2.1.2、創(chuàng)建build.gradle文件
在這個文件夾下面創(chuàng)建一個build.gradle文件,內(nèi)容:
apply plugin: 'java'
2.1.3、創(chuàng)建Java工程結(jié)構(gòu)并編寫代碼
然后在工程文件夾下創(chuàng)建Java工程結(jié)構(gòu),并在src/main/java下創(chuàng)建一個文件,Calculator文件。PS:我創(chuàng)建的工程文件夾叫Gradle。
Calculator.java
import java.lang.String;
public class Calculator{
public int add(int a, int b){
return a + b ;
}
public static void main(String[] args) {
Calculator calculator = new Calculator() ;
int result = calculator.add(1,2) ;
System.out.println(String.valueOf(result));
}
}
2.1.4、使用gradle構(gòu)建工程
在工程文件夾下使用命令行g(shù)radle build構(gòu)建工程。
gradle build
然后查看工程文件夾:
我們可以看到多出了build文件夾,這個是使用gradle構(gòu)建出的內(nèi)容。我們可以看到有class和jar文件。那么我們?nèi)ミ\行一下試一試。
我們看到,輸出3,正是我們程序預期的結(jié)果。OK這樣我們使用gradle構(gòu)建好了一個基礎(chǔ)的Java工程了。接下來為我們的工程添加測試文件。
2.2、使用JUnit進行單元測試
2.2.1 添加依賴
首先我們需要在build.gradle中添加依賴,那么更改之后的build.gradle文件如下。
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.12'
}
2.2.2、添加單元測試代碼
在src/test/java中創(chuàng)建CalculatorTest.java文件:
內(nèi)容如下:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class CalculatorTest {
@Test
public void evaluatesExpression() {
Calculator calculate = new Calculator();
int sum = calculate.add(1,2);
assertEquals(3, sum);
}
}