步骤 1 : 用 main 进行测试
大家刚开始写代码的时候,都会用 main 函数来进行运行。顺便测试一下所写的代码,是否按照期望运行。
比如如下代码,用来测试sum方法是否按照预期进行执行。
package junit;
public class SumUtil {
public static void main(String[] args) {
int result = sum1(1,2);
System.out.println(result);
}
public static int sum1(int i, int j) {
return i+j;
}
}
步骤 2 : main 的问题
通过main方法来进行测试的问题是显而易见的。
比如新开发了一个方法,是对3个数求和,那么问题至少有两个:
要在原来测试的基础上修改,可能破坏原来的测试逻辑
测试成功了,还是i测试失败了,都不知道呀。。。只能通过肉眼进行观察,如果测试的量很大,是很难看的过来滴
.
package junit;
public class SumUtil {
public static void main(String[] args) {
int result = sum1(1,2);
System.out.println(result);
int result2 = sum2(1,2,3);
System.out.println(result2);
}
public static int sum1(int i, int j) {
return i+j;
}
public static int sum2(int i, int j, int k) {
return i+j+k;
}
}
步骤 3 : junit
为了应付这种测试的需求,我们就需要使用 junit 测试框架来进行测试工作。
首先下载 junit-4.9.jar, 导入到项目中。
然后创建 TestCase1类,并创建一个方法:
@Test
public void testSum1() {
int result = SumUtil.sum1(1, 2);
Assert.assertEquals(result, 3);
}
它是由 @Test 进行了注解,表示这个方法是一个测试方法
Assert.assertEquals(result, 3); 表示对 result 数值的期待是 3,如果是其他数值,就无法通过测试。
package junit;
import org.junit.Test;
import junit.framework.Assert;
public class TestCase1 {
@Test
public void testSum1() {
int result = SumUtil.sum1(1, 2);
Assert.assertEquals(result, 3);
}
}
步骤 4 : 运行方式
与main方法运行不一样,运行测试用例的时候,需要选择 Run As -> JUnit Test 方式
运行成功之后,会显示如图所示的样子,是绿色的
接着,我们新增加一个 testSum2 方法, 用于测试sum2 方法。
这一次,我们故意写成
Assert.assertEquals(result, 5);
看看如果测试不能通过是什么样子的。
package junit;
import org.junit.Test;
import junit.framework.Assert;
public class TestCase1 {
@Test
public void testSum1() {
int result = SumUtil.sum1(1, 2);
Assert.assertEquals(result, 3);
}
@Test
public void testSum2() {
int result = SumUtil.sum2(1, 2,3);
Assert.assertEquals(result, 5);
}
}
步骤 7 : 运行失败
运行之后,因为 result 的值是 6, 并不等于5, 所以失败之后,看到如图所示的效果,表示没有通过测试。
而且还给出了失败的行数: TesetCase1.java:18
现在回过头来看 junit 解决的main 的问题 中的2个问题
步骤 9 : before & after
@Before @After 也是常见的测试框架注解,分别用来在测试开始之前做的事情,和结束之后做的事情。
package junit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import junit.framework.Assert;
public class TestCase1 {
@Before
public void before() {
System.out.println("测试前的准备工作,比如链接数据库等等");
}
@After
public void after() {
System.out.println("测试结束后的工作,比如关闭链接等等");
}
@Test
public void testSum1() {
int result = SumUtil.sum1(1, 2);
Assert.assertEquals(result, 3);
}
@Test
public void testSum2() {
int result = SumUtil.sum2(1, 2,3);
Assert.assertEquals(result, 5);
}
}
步骤 10 : Assert
关于 Assert的用法,除了举例里的判断数字是否相等,还可以判断boolean, 是否是null ,是否是相同对象等等常见逻辑。