Java是完全面向对象语言,所有功能都在类中实现,新人测试代码时,一般都会对每个类写一个main函数来调用其功能,JUnit正是取代这种繁琐操作的实用工具。它能够不依赖main直接对代码测试。
测试平台:IntelliJ IDEA 2017.2
下载插件:File -> Settings -> Plugins
,搜索JUnit下载
实际上IDEA自带JUnit插件,不用再下载安装,但新建的java工程需要配置它的环境,
配置环境:File -> Project Structure
,1点击左列的Libraries,2点击上方的加号,3在本地IDEA安装目录的lib下找到图中这三个插件添加进来
新建工程:File -> New -> Project,自定义项目名称(示例为JUnitTest)和项目路径
demo代码①:在src文件夹新建Java Class文件(示例为TestDemo.java),观察一个最简单的单元测试Test用法
import org.junit.Test;
public class TestDemo {
@Test
public void show1(){
System.out.println("测试方法一");
}
@Test
public void show2(){
System.out.println("测试方法二");
}
}
可见,不需要main函数,TestDemo类的方法也可以Run。
demo代码②:在src文件夹新建Java Class文件(示例为Calculator.java),观察demo类中的main函数测试和JUnit测试的不同
// 类定义和main函数测试,这里main方法暂时取消注释
public class Calculator {
public int add(int x, int y) { //加法
return x + y;
}
public int sub(int x, int y) { //减法
return x - y;
}
public int mul(int x, int y) { //乘法
return x * y;
}
public int div(int x, int y) { //除法
return x / y;
}
public int div2(int x, int y) { //除法 做了异常判断
try {
int z = x / y;
} catch (Exception e) {
e.printStackTrace();
}
return x / y;
}
public void unCompleted(int x, int y) { //未完成的模块:例如平方、开方等等
//TODO
}
// public static void main(String[] args) { // 传统代码测试
// int a = 8;
// int b = 2;
// Calculator calculator = new Calculator();
// if (calculator.add(a, b) == 10) {
// System.out.println("Test passed!");
// } else {
// System.out.println("Test failed!");
// }
// if (calculator.sub(a, b) == 6) {
// System.out.println("Test passed!");
// } else {
// System.out.println("Test failed!");
// }
// if (calculator.mul(a, b) == 16) {
// System.out.println("Test passed!");
// } else {
// System.out.println("Test failed!");
// }
// if (calculator.div(a, b) == 4) {
// System.out.println("Test passed!");
// } else {
// System.out.println("Test failed!");
// }
// System.out.println(calculator.div2(a,0));
// }
}
再使用JUnit测试,将main方法注释,选中类名Calculator,使用快捷键①CTRL+SHIFT+T -> Create New Test
,或者②ALT+Enter -> Create Test
,二者是一样的。在对话框中填入的测试类的名称和勾选需要测试的方法,则会自动新建一个测试用例文件(示例为CalculatorJUnitTest.java)
注1:测试的方法必须是public,且不能有static修饰。
注2:若快捷键无效,可在 Settings -> Keymap 里搜索test查询或修改对应快捷键。
// JUnit建立的测试类框架,每个方法内部自定义编写
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculatorJUnitTest {
Calculator calculator = new Calculator();
@Test
public void add() throws Exception {
if (calculator.add(8, 2) == 10) {
System.out.println("Test add passed!");
} else {
System.out.println("Test add failed!");
}
}
@Test
public void sub() throws Exception {
if (calculator.sub(8, 2) == 6) {
System.out.println("Test sub passed!");
} else {
System.out.println("Test sub failed!");
}
}
@Test
public void mul() throws Exception {
if (calculator.mul(8, 2) == 16) {
System.out.println("Test mul passed!");
} else {
System.out.println("Test mul failed!");
}
}
@Test
public void div() throws Exception {
}
@Test
public void div2() throws Exception {
}
}
可见,JUnit可以更清晰有效地完成各个方法的测试。测试单个方法时,在该方法名上右键点Run。
1)JUnit环境配置时,有同学在Settings里搜索JUnit出现了JUnit Generator,我没有搜到,不知道是不是版本问题。
2)Create Test或Create New Test时没有新建test文件夹,不知道有没有设置错误。
参考:
[1] java单元测试(@Test)
[2] IDEA中单元测试@Test使用
[3] IntelliJ IDEA快速自动生成Junit测试类