单元测试大家听得很多,但平时在学校和工作时,愿意主动写单元测试的却很少。很多开发者都觉得写测试比较无趣,而且浪费时间。同时开发者一般都会觉得自己写的这段代码很简单,不需要单独测,而经常造成的结果是正式运行时出错,仔细一看发现某个地方疏忽了。然后重修修正。其实这个时间浪费的一点也不比写单元测试的时间少。我们可以这样想,就像一个正在练习武功的少年,刚学会一个新招式,就直接去找江湖人士试练,你觉得能熟练使用新招式的可能性有多大呢?也许招式动作不标准,也许速度不够,导致无法正确使出。所以练新招式后,有个木头人或沙袋来检验下自己招式的效果,再去和别人比武,还是很有必要的。
单元测试,是指对软件中的最小可测试单元进行测试,Java里单元指一个类。类之间的交互是通过方法,所以对方法的测试是首先需要学习的。
1.测试方法的返回值
最简单的测试莫过于验证一个方法的返回值,这种测试是所有程序测试的基础,而之后复杂的测试也最终会分解成这种测试。
我们先写一个简单的加法类,含有一个计算两个整数之和的方法。
package com.cs.calculator;
public class Calculator {
public int add(int para1,int para2)
{
return para1+para2;
}
}
接下里我们利用Junit单元测试框架来对这个方法进行测试。测试的方法是输入两个整数,利用该方法进行计算,然后比较方法计算得出的值与我们的预期值是否一样。
package com.cs.calculator;
import org.junit.Assert;
import org.junit.Test;
public class CalculatorTest {
@Test
public void testAdd()
{
Calculator cal=new Calculator();
int res=cal.add(3, 5);
Assert.assertEquals(8, res);
}
}
Junit里用Assert.assertEuals(expected,actual)来断言计算出的实际值actual与预期值expected相等,如果不相等,则此测试不通过。此例中我们输入3和5,所以他们的和预期是8.
执行此例,测试通过。