几百个case,且几天要完成似乎有点棘手。当仔细分析之,熟悉了业务后,用一些好的方法便可事半功倍,下面是我的一些体会:
- 我在测CMDB时,发现其实每个类都写了很多重复的代码,比方:声明服务接口,操作事务,保存实体…这些都可放在一个公共类里面,当然也可以把这个类声明成virtual。下面测每个module时便可以继承这个方法。这样一来可以少做很多无用功,二来可以使代码增强可读性,使代码干净,清爽。产生这些冗余代码的原因主要的是因为几个tester都在做这个module下的case,每个人只关心自己负责的case,这势必造成这种情况。我的建议是,UT前,测试人员应该将整个module的业务了解清楚,再互相交换意见,达成一致。
- 测某个method时,先在工程文件中找到定义它的接口,通过服务接口类调用这个方法的声明,编译器会通过虚表(Vtable,也就是搜索子类遍历时的索引)遍历实现这个接口的方法,默认情况下编译器会是向上搜索。调用服务接口,一可使测试人员清楚看到哪些方法是需要测试的,利于增加覆盖率;二可少做很多工作,因为具体的实现方法已经替你做好了很多事,不用在去做类似open session,Dao,transaction commit/rollback…这类工作,这些都已经封装好了,直接调用接口就可以了。
- 注意随时打断点,监控程序的运行,遇到操作数据库的方法,最好到数据库中检查程序是否对数据造成影响,所以建议增删改操作时应使用事务。
- 对例如创建连接等操作建议使用using()关键字,这样当你忘记关闭连接时,编译器会自动调用析构函数,帮你clean掉内存中的垃圾数据。最好能使用try/catch/finally,在try中加上事务提交或者回滚的函数。
- 创建一条数据后,别忘了删除这个实体,一面造成每次运行case产生大量的冗余数据。finally()里别忘了清空/关闭session,因为NHB(Nhibernate)是通过映射关系数据库并对内存操作的,当增加很多实体后,内存会产生很多脏数据,影响性能,容易产生内存泄漏。所以及时清空session是必须要做的。
- 没有覆盖到的方法,应在服务接口中查找之,在调用接口下的这个方法声明。如果直接调这个方法,要考虑到周全,比方何时对事务进行操作,何时释放session等,而这些Dev已经将其封装好了,直接调用就可以了。
- 我还发现TFS一个有点诡异的问题,在run全部case时,如果发生全部case是not execute这种现象,解决方法很简单,关闭TPreSry这个进程,重新打开VS就可以了。
- 还有一个值得注意的地方,就是在解决方案资源管理器中移动文件时,文件移动的位置有时并非是你想让它放得位置,而可能会移动到其他工程里面,造成编译失败,这也是2008下TFS不稳定的一方面。
- 关于null reference的问题,1.是因为对实体属性的赋值有空字段,而插入的这张表该字段不为空,所以会报这个错;2.是因为给这个实体对象的基类对象也赋值了,而有没有实例化父类,势必会报这样的异常;3.也跟程序设计本身相关,如果漏掉一个不为空的字段,就会引起这样的情况,在这种情况下,单步跟踪时很重要的。
以上是我的几点总结和建议,希望对他人有所帮助。