Junit
第一,junit使用很方便。在Eclipse的支持下,上手很快,很轻松就可以写出测试用例。
第二,震撼于"先写测试"的理念。开始比较抵触"先写测试",觉得很不理解,非常别扭。通过学习知道了写junit的目的不仅仅是测试程序,她从根本上督促自己设计程序结构。写完junit后,我们对我们要写的程序的目的就非常的清晰,写起来相当的快。在testCase建立后,后面的测试就是自动化的了,不需要我们手工对程序反复检查,也节约的很多时间,并且保证了品质。
第三,她的实现结构很精巧。用reflection机制自动执行testXX方法,以及composite的应用,都值得我们学习。现在仅仅是摸到了JUnit的皮毛,要在大规模开发中使用JUnit,还是有很多问题有待解决。首先是测试的粒度。如果每个方法都要去写一个测试方案的话工作量会很大,但到底什么样的方法可以不去测试呢,而且有些方法和其他的方法关联性很大,我们想测试方案又要剥离与他关联的方法,这样测试写起来就很大,这样的结果是,测试类也需要被测试了,我们是不是又去写一个test 的test 程序呢,这些都需要在实践中摸索.
此时我们的工程就把这些Junit的测试相关的类都导进来了,这时就可以开始我们的测试历程了。
我们通常是在src源文件包下写我们的源码,为了保证我们的测试类既能与我们的工程分开又能使我们的项目的测试类编译之后能够与我们的要进行测试的类的编译文件在同一个包下,我们可以在工程中新建一个test源包,但是我们要保证测试类和我们的要测试的类有一样的包路径,例如我们的测试类的相对路径为 org.rjb.Calculate,那么我们在test源包下的测试类的路径为org.rjb.CalculateTest,这样一来他们编译之后就在同一个包路径下了,不信你可以试试看噢。
下面我先讲讲一些规则:
测试类名词我们可以定义为被测试类类名+Test来命名(不成文规定);
测试类必须继承自junit.framework.TestCase,它有几个这里需要声明的方法:
1.public void setUp():这个方法是在每个测试方法开始前要调用的方法,也就是说有几个方法要测试,那就要进行几次 调用,在JUnit3.8中只能这样,但是在JUnit4.0中却可以在整个测试过程中只调用一次。
2.public void tearDown():这个方法就和上面的方法相对了,也就是在每个测试方法测试之后调用,调用次数完全和上面的方法相同。
测试类中的方法命名规则为test+被测试方法名,当然要被测试方法名要大写了。也就是说测试方法必须是test开头的,可见找到相应的方法是通过反射来找到的。
考虑到我们能够一次性把所有的测试类都执行,我们可以定义一个测试类,只要继承junit.framework.TestSuite就可以了,此时我们必须有下面方法public static Test suite(),究竟如何使用请看下面的代码展示.
JUnit 将测试失败的情况分为两种:failure 和 error。Failure 一般由单元测试使用的断言方法判断失败引起,它表示在测试点发现了问题;而 error 则是由代码异常引起,这是测试目的之外的发现,它可能产生于测试代码本身的错误(测试代码也是代码,同样无法保证完全没有缺陷),也可能是被测试代码中的一个隐藏的 bug。
请牢记这一条 JUnit 最佳实践:测试任何可能的错误。单元测试不是用来证明您是对的,而是为了证明您没有错。