所有代码都要进行测试

我们可以从一下几个方面来分析junit:

  • junit中的不同测试方法
  • junit与构建框架的结合(Ant,Maven等)
  • 还有Junit的一些扩展

广义上来说测试方法有两种

第一种是手动测试,即当你编译运行时,发现结果不是你想要的,就重新编辑代码然后在运行。如此不断的重复下去,知道得到理想的结果。或许有时候经过所谓的不停的调试,令你在最终获得想要的结果时有强烈的成就感,但是要知道在此之前,你做了多少重复劳动?

因而会相对另一种方式:自动测试。与其自己不停的调试,有时候还不如自己编写一段用于测试的代码让它来自动运行测试,junit正是出于这个目的而诞生的。

使用Junit测试框架的好处:

  1. 将测试代码与主代码分离
  2. 测试代码更容易编写
  3. 测试代码更为严密
  4. 提供了强大的断言assert
  5. 可以不使用junit自行编写单元测试代码,但是随着测试变得越来越多,测试代码的编写会变得越来越复杂和容易出错。

刚开始的时候,有人可能喜欢在需要测试的类里面直接编写一个main函数来对需要的函数来进行测试。这样就违背了上面所说的第一点。如果你在main函数中进行单个方法的测试,测完之后就把main函数删了,这样的话当你该方法改动了之后再测试时,就需要重新编写测试代码。由此可见使用junit进行测试的优越性和必要性。

从一个好的系统的角度来讲,上面的这种做法是不可取的。

书写Junit代码的方法:建立一个测试类,然后书写测试方法,测试方法上一行使用@Test注释标注。新建一个要测试的类的对象,调用要测试的方法进行测试。最后通过一个断言来判断实际值和预期值。如:

1
2
3
4
5
6
7
8
public class JohnTest {
@Test
public void testAdd() {
John john = new John();
int sum = john.add(10, 30);
assertEquals(30, sum);
}
}

上面的简单例子测试了John这个类中的add方法。assertEqual()函数中的第一个参数表示预期值,第二个是你的到的实际值。当测试出错时,junit会抛出异常,帮你定位问题。PS:这个异常机制非常重要,但如果你自己实现一个测试代码并包含异常机制,当需要测试的方法很多时,就会显得混乱。


junit4.x的测试代码中,测试类和测试方法的命名没有特别的规定。但习惯上还是按照我上面的之中命名方法。@Test注释不能省。
junit带来的这么多的便利,或许也是junit日益称为java标准测试标准的原因。