对junit单元测试一些了解
在junit中主要使用了观察者模式、组合模式、命令模式、模板模式这4中模式。
那么在junit中为了要用到观察者模式呢?我们知道,我们使用ant、eclipse等工具进行单元测试,但是他们测试后的结果却是以不同的形式去表示的,也就是出现了多样化,比如,ant测试后的结果是使用报表的形式表示的,而eclipse是则是以图形界面的形式去表示,那么在此junit中就使用观察者模式去设计的,因为观察者模式时对象间一对多关系的。
而在进行junit测试时,当测试类很多时。比如有dao层的测试类,service层的测试类,如果我们需要在同一时间来测试所有的类,这时junit就是使用组合模式来解决这个问题的。它将测试的对象以树的形式来表示。这样只要调用了根节点,就能遍历测试到所有的类。
那么命令模式在junit中又起到了何种作用了?我们知道命名模式的定义是将请求操作封装成一个个的对象。因为我们测试的方法名是各不相同的,我们需要将其相互隔离,这是我们就可以使用命令模式将其转换成一个个的对象,这样在测试时不需要关心其具体的细节,仅以一种命令的形式去调用就可以了。
而模板模式在junit中也起着一种不可或缺的作用,模板模式定义是这样的在父类定义算法执行的骨架,具体延迟到子类中去实现。这样当我们在测试时需要在测试的方法之前,加入一些对测试有用的数据初始化操作或测试完后的清理工作。
执行流程:
先定义一个被观察者,然后将观察者添加到被观察者的观察者列表中去。这是使用组合模式将测试用例以树的形式表示,junit中的testsuite就是一个树枝,而testcase就是一个树叶,这在测试执行时,就可以调用一个根节点,就能够执行到里面所有的测试方法了。当然在此时同样使用了命令模式对测试方法进行封装,将其转换成了一个个命令对象。这样我们在测试时就只要以命令的形式去调用就可以了。在对于模板模式的使用则延迟到testcase的子类中去了,也就是我们的测试类,在测试类的测试方法前我们可以重写父类模板中定义好的setUp方法,进行数据初始化操作,而tearDown则是在测试方法执行之后执行,用例当前方法的测试,可以在此编写一些扫尾的工作,如数据清理,资源释放等。而在测试时一旦抛出异常,就会调用被观察者,将测试信息传递给观察者,再由观察者以相应的形式显示给客户。