首页 新闻 赞助 找找看

用VS2008单元测试需要读取app.config的项目

0
悬赏园豆:10 [待解决问题]

对一个需要读取app.config获取数据库连接字符串的项目创建单元测试,测试抛出异常:System.NullReferenceException: 未将对象引用设置到对象的实例,一步步debug发现在测试项目中无法读取被测项目的app.config文件。在网上看到解决方法有三种:

1.在测试项目中添加app.config文件,将被测项目的app.config文件中的内容复制到测试项目的app.config文件中(不推荐,需要维护两份app.config文件)

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

3.如这里面的最佳答案所述:http://stackoverflow.com/questions/344069/can-a-unit-test-project-load-the-target-applications-app-config-file

 

我的问题是:

1.方法3,配置测试部署这个,我试过却不成功,可能我的做法不对,能不能有朋友告诉我该怎么做?

2.我曾经写过一个项目,调用其他项目发布到IIS服务器的web service,这个web service读取的就是自己的web.config文件用于远程连接数据库;我觉得用VS2008创建的测试项目本身也是一种调用的方式,调用被测项目,为什么却要读取测试项目自己的app.config文件?我有点搞不懂,在项目中涉及到读取配置文件的代码时,什么时候读取自己的配置文件,什么时候读取所调用项目的配置文件?

Jessie.M的主页 Jessie.M | 初学一级 | 园豆:181
提问于:2012-01-05 11:48
< >
分享
所有回答(3)
0

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

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

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

Eugene Wang | 园豆:239 (菜鸟二级) | 2012-01-05 12:54

我试着用reflector查看,想问您两个reflector使用的问题:

怎么找类中extern方法的定义,就是说怎么知道这个extern的定义在哪个程序集里?

您直接调试过.net源码吗?就是网上很多人说的从微软的服务器上下载符号的方法?

支持(0) 反对(0) Jessie.M | 园豆:181 (初学一级) | 2012-01-11 17:32

@Jessie.M: 

在VS里面将鼠标焦点移到方法上面,点击鼠标右键,点击【转到定义】菜单项,VS就会转到扩展方法的元数据定义,将鼠标光票移到当前页面的标签上,就会显示出代码所在的程序集信息

 

 

支持(0) 反对(0) Eugene Wang | 园豆:239 (菜鸟二级) | 2012-01-12 13:56

@Eugene Wang: 

@Eugene Wang: 就是一直这样转到定义、转到定义,查看到一个方法:

[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern bool InternalEquals(object objA, object objB);

 

时,怎么也转不到定义了

支持(0) 反对(0) Jessie.M | 园豆:181 (初学一级) | 2012-01-13 16:04
0

1. 不知道你遇到的是什么问题,我的想法是在ClassInitialize方法里写代码把config文件拷贝到测试项目运行目录

2. 因为单元测试是由测试项目运行的,而当你运行测试项目时,只是引用了你的被测项目,所以是寻找测试项目的config文件

klice | 园豆:173 (初学一级) | 2012-01-06 13:39
0

mark

司马东西 | 园豆:246 (菜鸟二级) | 2014-07-24 22:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册