所有代码都要进行测试
我们可以从一下几个方面来分析junit:
- junit中的不同测试方法
- junit与构建框架的结合(Ant,Maven等)
- 还有Junit的一些扩展
广义上来说测试方法有两种
第一种是手动测试,即当你编译运行时,发现结果不是你想要的,就重新编辑代码然后在运行。如此不断的重复下去,知道得到理想的结果。或许有时候经过所谓的不停的调试,令你在最终获得想要的结果时有强烈的成就感,但是要知道在此之前,你做了多少重复劳动?
因而会相对另一种方式:自动测试。与其自己不停的调试,有时候还不如自己编写一段用于测试的代码让它来自动运行测试,junit正是出于这个目的而诞生的。
使用Junit测试框架的好处:
- 将测试代码与主代码分离
- 测试代码更容易编写
- 测试代码更为严密
- 提供了强大的断言assert
- 可以不使用junit自行编写单元测试代码,但是随着测试变得越来越多,测试代码的编写会变得越来越复杂和容易出错。
刚开始的时候,有人可能喜欢在需要测试的类里面直接编写一个main函数来对需要的函数来进行测试。这样就违背了上面所说的第一点。如果你在main函数中进行单个方法的测试,测完之后就把main函数删了,这样的话当你该方法改动了之后再测试时,就需要重新编写测试代码。由此可见使用junit进行测试的优越性和必要性。
从一个好的系统的角度来讲,上面的这种做法是不可取的。
书写Junit代码的方法:建立一个测试类,然后书写测试方法,测试方法上一行使用@Test注释标注。新建一个要测试的类的对象,调用要测试的方法进行测试。最后通过一个断言来判断实际值和预期值。如:
上面的简单例子测试了John这个类中的add方法。assertEqual()函数中的第一个参数表示预期值,第二个是你的到的实际值。当测试出错时,junit会抛出异常,帮你定位问题。PS:这个异常机制非常重要,但如果你自己实现一个测试代码并包含异常机制,当需要测试的方法很多时,就会显得混乱。
junit4.x的测试代码中,测试类和测试方法的命名没有特别的规定。但习惯上还是按照我上面的之中命名方法。@Test注释不能省。
junit带来的这么多的便利,或许也是junit日益称为java标准测试标准的原因。