单元测试是很重要的一个步骤。写代码的都应该会这个技能,自己写的代码自己测!
本文说的是java的单元测试,用的是JUnit通过注解的方式来识别测试方法
JUnit目前支持的注解有:
下面基于IDEA介绍JUnit的基本应用
1.首先先新建一个java项目,我们编写一个Calculator类,做一个简单的计算机功能,里面有加减乘除的方法。然后进行单元测试:

public class Calculator { private static int result; // 静态变量,用于存储运行结果 public void add(int n) { result = result + n; } public void substract(int n) { result = result - 1; //Bug: 正确的应该是 result =result-n } public void multiply(int n) { } // 此方法尚未写好 public void divide(int n) {//除法 result = result / n; } public void square(int n) { result = n * n; } public void squareRoot(int n) { for (; ;) ; //Bug : 死循环 } public void clear() { // 将结果清零 result = 0; } public int getResult(){ return result; } }
2.再新建一个测试的类,这里需要引入JUnit的jar包,放心,idea直接会帮你引的。无非就是Alt+Enter的事

import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class CalculatorTest { private static Calculator cal = new Calculator(); @Before public void setUp() throws Exception { cal.clear();//清空值 } @Test public void testAdd() { cal.add(10); cal.add(1); assertEquals(11,cal.getResult());//正确 } @Test public void testSubstract() { cal.add(3); cal.substract(3); assertEquals(0, cal.getResult());//错误在于方法上 } @Ignore("Multiply() Not yet implemented") @Test public void testMultiply() { fail("Not yet implemented"); } @Test(expected = ArithmeticException.class) public void divideByZero(){ cal.divide(0); } @Test public void testDivide() { cal.add(5); cal.divide(1); assertEquals(5,cal.getResult());//正确 } @Test(timeout = 1000) public void testSquareRoot() { cal.squareRoot(4); assertEquals(2,cal.getResult()); } }
我们来静静分析一下代码:
assertEquals(a,b); //a是期望值,a 和 b会做一个对比,不一样的话会出现报错