在UnitTest中读取*.config文件的郁闷
- -Visual Stuido 2005集成了Unit Test功能后,创建和管理Unit Test变得比原来简单多了,并且独立项目的Unit Test模块和代码不会再"残留"于我们的dll中。不过VS 2005 Unit Test运行方法的原理和其他的Unit Test框架一样,也是使用反射来实现的,这样就会造成代码中一些依赖于运行环境的参数获取不到。
刚才做了一个方法的Unit Test,该方法依赖于Web.confing里面的一个定制参数,于是郁闷就来了。当我运行测试代码时,发现那个Config里面配置参数总是为null。本来这个问题应该一点都不复杂,可是当我查看程序编译时的输出信息时,发现如下的一个Warning:
本来还有点清醒的我被这个Warning搞糊涂了,还以为是旧的方法出了什么问题被废弃,结果把本来简单的问题想的越来越复杂:(。于是按编译提示把ConfigurationSettings改成了ConfigurationManager,显然这是徒劳的,问题依旧,还是无法取到Config文件里的参数值
。
在ConfigurationSettings和ConfigurationManager间又倒腾了半天,仍然是毫无起色。在郁闷了很久之后,突然醍醐灌顶想到,config文件是一个应用的全局配置,应该在应用本身正常启动后才能被载入生效。由于Unit Test使用反射的方式载入assembly和class,再Invoke被测试的方法,这样一来本身的应用没有被正常的启动,config信息当然也就无从获取。于是马上启动应用本身,果然就取到了config文件中配置的参数。
所以在做Unit Test的时候,需要注意被测试的方法是否依赖了config文件中的参数,如果有需要暂时使用hardcode的常量来代替,再进行我们的Unit Test测试,否则就只有自个郁闷去吧
。
以上问题出现在ASP.NET项目中对Web.config文件的读取,至于WinForm程序的*.config文件想来也该有这个问题,不过还没有亲自去验证。
刚才做了一个方法的Unit Test,该方法依赖于Web.confing里面的一个定制参数,于是郁闷就来了。当我运行测试代码时,发现那个Config里面配置参数总是为null。本来这个问题应该一点都不复杂,可是当我查看程序编译时的输出信息时,发现如下的一个Warning:
'System.Configuration.ConfigurationSettings.AppSettings' is obsolete: 'This method is obsolete, it has been replaced by System.Configuration!System.Configuration.ConfigurationManager.AppSettings'
本来还有点清醒的我被这个Warning搞糊涂了,还以为是旧的方法出了什么问题被废弃,结果把本来简单的问题想的越来越复杂:(。于是按编译提示把ConfigurationSettings改成了ConfigurationManager,显然这是徒劳的,问题依旧,还是无法取到Config文件里的参数值

在ConfigurationSettings和ConfigurationManager间又倒腾了半天,仍然是毫无起色。在郁闷了很久之后,突然醍醐灌顶想到,config文件是一个应用的全局配置,应该在应用本身正常启动后才能被载入生效。由于Unit Test使用反射的方式载入assembly和class,再Invoke被测试的方法,这样一来本身的应用没有被正常的启动,config信息当然也就无从获取。于是马上启动应用本身,果然就取到了config文件中配置的参数。
所以在做Unit Test的时候,需要注意被测试的方法是否依赖了config文件中的参数,如果有需要暂时使用hardcode的常量来代替,再进行我们的Unit Test测试,否则就只有自个郁闷去吧

以上问题出现在ASP.NET项目中对Web.config文件的读取,至于WinForm程序的*.config文件想来也该有这个问题,不过还没有亲自去验证。
posted on 2006-03-16 01:29 birdshome 阅读(2191) 评论(5) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器