我们都知道,在合作开发中,我们写的类是要给别人用的,那么会不会有Bug呢?显然,我们需要测试。在之前的学习中,一般我们都是写个main方法进行测试。
先分析一下用main方法测试的几个弊端:
1. 不能有组织地运行。(解释一下,就是说不能有效地控制测试哪些方法,有人就要说了,我就在main方法里把要测试的方法都测试一下呗。是可以,但是项目大了呢,创建一堆对象,再调用N个方法,估计自己看了都晕了)
2.需要人为地去判断一个个运行结果是否正确。(估计测试了十几个方法就看晕了)
JUnit就可以弥补这些弊端。JUnit是一个非常常见的单元测试框架,利用它可以很容易地组织几套测试用例。
一个简单的例子:
T 类是要测试的类:
- package org.htnecro.junit4;
- public class T {
- public int plus(int x, int y) {
- return x + y;
- }
- public int minus(int x, int y) {
- return x - y;
- }
- }
将测试代码写在一个新的Source folder—test里面与源码分离开,新建Junit Test Case—TTest 类:
- package org.htnecro.junit4;
- import static org.hamcrest.Matchers.greaterThan;
- import static org.hamcrest.Matchers.*;
- import static org.junit.Assert.assertThat;
- import org.junit.Test;
- public class TTest {
- @Test
- public void testPlus() {
- int z=new T().plus(2, 2);
- assertThat(z,is(4));
- }
- @Test
- public void testMinus() {
- int z=new T().minus(5, 3);
- assertThat(z, greaterThan(1));
- }
- }
assertThat(actual, matcher)是JUnit4的一个新方法,之前常用的是assertEquals()方法,actual参数就是实际值,macher的意思是匹配,可以看到引入的包中有个hamcrest,hamcrest是一个书写匹配器对象时允许直接定义匹配规则的框架。
@Test 是JUnit4 Annotation注解,当然还有一些其他的注解。
Run as JUnit Test:
Errors:0 Failures:0 测试正确。
Junit可以分开组织需要测试方法。可以测试单个的方法,也可以测试一个类的,一个包下的,甚至一个项目下的所有方法。而且很易于重用和修改。