太白将进酒,共邀天下友

形位合成变动静,有无陈新映全域。 内外移思抽精明,连续离散归终果。

导航

[导入]事实又一次证明单元测试的重要

起因:
TT在部署好医生工作站组件后,调试某服务抛出不明异常,但是去服务器上看日志文件并没记录该异常。检查了一下配置文件和组件加载情况,一切正常,故判断是客户端程序问题,然后TT去检查自己的客户端程序,由于客户端未做日志服务,检查起来比较麻烦,一段一段的抛异常,最后发现并不是TT那边客户端程序的问题,最后定位到不明异常为客户端框架的FindMethod抛出的,该方法代码如下:

public class InterfaceConfigLoader {    ...  
   public MethodParser FindMethod(string serviceType, string methodName, string[] parameterType) { foreach (ModuleParser moduleParser in modules) { MethodParser mp = moduleParser.FindMethod(serviceType, methodName, parameterType); if (mp != null) return mp; } return null; } }
public class ModuleParser { ..... private Dictionary<String, ServiceParser> remoteServices; public MethodParser FindMethod(string serviceType, string methodName, string[] parameterType) { if (remoteServices[serviceType] != null) return remoteServices[serviceType].FindMethod(methodName,parameterType); return null; } }


最后异常定位到remoteServices[serviceType] != null,原来Dictionary与hashtable不同,像这样写remoteServices[serviceType],当Dictionary里面没有serviceType这个key值时会抛出异常。TT工作站加载进来之前我的工作站调用该服务并未抛出异常是因为我的模块配置在他之前,在InterfaceConfigLoader里面的第一轮循环就可以找到该值,而TT还没等到循环到他的模块配置已经出错,找出这个问题整整花了50多分钟,郁闷啊!所以接下来要做两件事情:
一、完善客户端日志(客户端也是有大量逻辑的,应为在现在的框架下是无法调试跟踪,没有日志,这样调试太麻烦了)。
二、补上单元测试(这块代码是以前还没贯彻测试先行的路线的时候写的,现在尝到不写单元测试的苦果了,不过再一次证明的单元测试的重要性)。


文章来源:http://www.agilelabs.cn/blogs/pump/archive/2006/01/07/486.aspx

posted on 2006-01-16 10:45  太白飞仙  阅读(160)  评论(0编辑  收藏  举报