asp.net单元测试--配置文件自动复制到VS的测试项目的方法



问题描述:

对一个需要读取web.config获取数据库连接字符串的项目创建单元测试,测试抛出异常:System.NullReferenceException: 未将对象引用设置到对象的实例,一步步debug发现在测试项目中无法读取被测项目的web.config文件。后来把web.config整个复制到测试项目中,却也发现不行。无奈之下,把复制到测试项目的web.config改成app.config,却发现可以从app.config中正确读出配置信息了。

相关约定:

1、如果是WEB应用程序,因为配置文件名必须为web.config,所以如果当前目录下有web.config文件,就读取当前目录下的配置文件,如果当前目录没有则读取根目录下的配置文件。

2、如果是winform/wpf/控制台应用程序,则配置文件就是【程序名.exe.config】

这些都是.NET配置系统约定好的规则,更详细的信息楼主可以使用reflector查看System.Web.Configuration.WebConfigurationManager和System.Configuration.ConfigurationManager两个类的源代码

3、如果是vs生成的单元测试项目,配置文件名必须是app.config。所以如果是在Web应用程序中运行单元测试,需要把web.config对应地修改成app.config。这样单元测试项目才能正确地从配置文件中读出相应的配置。因为单元测试是由测试项目运行的,当运行测试项目时,只是引用了我们的被测项目,所以是寻找测试项目的app.config文件

解决方法:

1.在测试项目中添加app.config文件,将被测项目的app.config文件中的内容复制到测试项目的app.config文件中(不推荐,需要维护两份app.config文件)。如果是web应用程序,还需要将web.config重命名为app.config,才能正确被测试项目读取。

2.在解决方案管理器中,右击测试项目→添加→现有项,选择被测项目的app.config文件,并选择“添加为链接”(如果直接添加则和方法1无区别,等同于复制文件,需要维护两个app.config文件,无法随被测项目中的原文件进行更新)

3、修改测试项目的生成事件,以便能够自动将web.config (或app.config)复制到测试项目的bin(输出)目录下。只需要简单几步即可

①右键点“测试项目”,选择属性

asp.net单元测试--配置文件自动复制到VS的测试项目的方法_第1张图片

②点击“生成事件”→在“后期生成事件命令行”的文本框中输入 copy "$(SolutionDir)WebApplication1web.config" "$(ProjectDir)$(OutDir)$(TargetFileName).config"

其中WebApplication1要替换成你被测试项目的名称。

asp.net单元测试--配置文件自动复制到VS的测试项目的方法_第2张图片

③按下“Ctrl+s”保存,这样每次运行测试项目的时候,他就会从被测试项目中复制一份配置文件。

你可能感兴趣的:(asp.net)