4、Run/debug测试用例代码
这应该是整个过程中最关键部分。debug过程中,会遇到不同情况的问题,导致用例跑不通。
我把过程中遇到的几个点都说明下:
配置中,其实还遗漏了sqlmap的配置,如果你的测试用例中需要访问数据库的话。找到代码中需要引用的sqlmap_mapping.xml文件,配到测试工程下的sql-map.xml中,如:
<sqlMap resource="sql/businessunit/businessunit_sqlmap_mapping.xml"/>
此sqlmap中配置了所有ibatisDAO调用的sql id。
至于到底用到了那份sqlmap文件,就需要我们查看代码追踪了。
我是在进行配置的时候,就直接配置了接口要用的sqlmap。
* 刚开始时,我初始化变量,就用了一个值,这个值给所有DO的字段属性set值;但发现最好还是能够区分下,这样传入的参数能够明确点。
* 进行数据库校验的时候,本想是直接调用service下的查询方法来校验结果;但经过元化的提醒,测试的预期结果最好是由自己来确认,而不是调用其他开发写的方法,若方法有问题那么校验就不准确了。所以查询数据的时候,增加了UnitUtil。java文件,里面就是自己写的一个方法用例获取自己需要的内容。比如queryUnit方法,我就是通过unit_name查询数据库中存在的记录,然后进行对比。
* Run一直失败,日志中是说expect和auctual不一致,通过debug发现,是因为我获取的auctual中有很多空值,但实际数据库中是有的。主要原因就需要看queryUnit是怎么实现的。
这个是现在的实现:
List <BusinessUnionDO> businessUnionDOList = (List<BusinessUnionDO>) jdbcTemplate.query(sql.toString(), |
下面的是原来写的,直接用了ParameterizedBeanPropertyRowMapper。
List <BusinessUnionDO> businessUnionDOList = (List<BusinessUnionDO>) jdbcTemplate.query(sql.toString(), |
ParameterizedBeanPropertyRowMapper类做的事情没有深究,大概是将DO的属性和数据库做个映射,如果数据库的字段和DO的属性命名是符合一些规范的,那么就可以不手工写映射就可以匹配。
但本次BusinessUnitDO中的属性字段跟数据库字段没有满足默认映射的条件,所以刚开始用这个类方法时一直assert对比不成功。
既然不能用默认的,就需要手工写映射关系,如:这样,映射问题解决了。