Wednesday, February 8, 2012 16:02

DAO层单元测试

Tagged with:
Posted by on Friday, February 27, 2009, 16:41
This news item was posted in Architecture category and has 1 Comment so far.

对于一些框架软件,例如springframework来说,要测试的是API实现的逻辑,这种情况下大量mock隔离其他对象的影响是必要的。但是对于我们应用程序,特别是数据处理型应用,你不测试数据库访问,根本就等于没有做测试。换句话说测试DAO就是在测试你的Hibernate映射关系有没有配对,你的HQL查询有没有写对,这一Mock,要测试的真正目标根本就没有达到。

 

这种DAO测试诚然就是集成单元测试,其实就是对于Web Action测试,我也曾经一度认为应该mock service来测试,但是现在我已经不这样做了,而是真正初始化webwork的容器注入真正的service对象来测试了。因为Action是没有业务逻辑的,测试Action的目标是看xwork.xml有没有配对,拦截器运用是否正确的,这一mock,直接把action对象当做POJO来测试,你只能测试action传了什么参数,其他什么都没有去测,但是action传入什么参数,那是OGNL自动完成的,用不着你多此一举了。

 

从这个角度来说,只有对util类的测试才是真正的单元测试,其他都是集成测试,但我不觉得这样做有什么不对。特别是我看过ruby on rails的测试框架以后更加坚定了这种做法。railsunit testfunctional testintegration test都是集成测试。

测试的策略和你用什么编程语言无关。单元测试也不是为了划清界限才产生的,单元测试为了保证软件的质量,这一点不要想歪了。不管是Java还是 Ruby,敏捷软件开发有一个理念,所有的人拥有所有的代码,不管代码是不是你经手的,你都有责任去维护它的质量。单元测试不是为了推卸责任。

railsJava在单元测试这一点上没有什么区别,本版前面有一个关于mock适用场合的讨论,这里不展开谈,只说结论:mock仅仅适用于测试环境无法重现的部分,例如信用卡支付网关,web容器请求和响应对象等等,mock不应该被滥用。

单元测试的范畴并不单单指隔离所有依赖对象进行单个对象的测试,否则任何对象的测试都必须引入mock,否则单元测试就无法完成的。怎么做单元测试要看你的测试目标,如果偏离了测试的目标,一昧追求纯粹意义上的隔离性,测试根本就是做无用功

This article is from another website which I forget. so sorry here.

1 Response to “DAO层单元测试”

  1. 孙加跃
    30 May, 2009, 23:08

    很深奥啊

Leave a Reply

You can leave a response, or trackback from your own site.