我想在我的一个项目上进行一些单元测试。这是一个Web项目,除了开发副本之外,该程序只有一个副本。
我想写一些将使用web.config
的单元测试。我理解通常情况下,测试人员会将这种外部依赖关系存根,因为他希望在没有测试的情况下测试代码,具体取决于web.config
保持某些值。
但是,我的项目中的web.config
应该始终保持某些值,并且我希望单元测试如果设置为无效值则会失败。例如,其中一个值是SQL连接字符串。
我想编写一个测试来读取web.config
的连接字符串。我设想测试可以连接到具有连接字符串的服务器,并且可能执行一个非常简单的命令,如SELECT system_user;
。如果命令成功执行并返回测试通过的内容。否则,它失败了。我希望从我正在测试的项目中的web.config
读取连接字符串。
当然,ConfigurationManager
通常不会在另一个项目中查找web.config
。我可以手动将web.config
从原始项目复制到测试项目,但是我必须在每次测试之前完成这项工作,并且我无法指望其他任何人这样做。
如何让我的测试项目从另一个项目中读取web.config
?
答案 0 :(得分:4)
听起来您正在尝试验证web.config中的设置,这是部署级别的问题,与单元测试不同。
单元测试告诉您核心逻辑正在按预期执行; 部署验证告诉您应用程序已正确安装和配置,并且可以安全使用。单元测试对开发人员有意义,部署验证对部署应用程序的最终用户或管理员有意义。
在这种情况下,我喜欢在我的应用程序中构建一个“系统控制台”。此控制台包含许多自我诊断检查,例如:
我强烈建议您考虑将此类配置和部署验证与您的单元测试套件分开。它不仅可以简化您的工作(因为您不会 从另一个项目加载配置文件),但它也是客户真正非常喜欢的那种工具:)
答案 1 :(得分:3)
您可以使用ConfigurationManager.OpenXXX()方法加载和浏览其他配置文件。
WebConfigurationManager
类专门有一个打开web.config文件的方法,我链接到的文档页面有一些代码示例。加载配置对象后,可以浏览它以获取部分和键。
var cfm = new ConfigurationFileMap("path/to/web.config");
var config = WebConfigurationManager.OpenMappedWebConfiguration(cfm);
答案 2 :(得分:1)
我问了一个类似的问题,你可能想看看:
How do I test that all my expected web.config settings have been defined?
我最终得到它的工作,但烦人的部分是我的源代码控制不断锁定复制的配置文件。您还可以将web.config重命名为app.config,以便它将编译为非Web项目。
答案 3 :(得分:1)
听起来你正试图用大锤压扁蚊子。为什么不手动执行此操作,作为部署清单的一部分;有一个任务来手动确认connectionString。
或者如果你想自动化它,编写一个程序来检查connectionString,将它附加到Continuous Integration服务器(假设你有一个),如果connectionString错误,则无法构建。
使用单元测试来测试代码而不是配置。
答案 4 :(得分:1)
如果您想将网站上的原始web.config文件用于单元测试项目而不复制它,则可以修改VS本地测试设置。
以下是在单元测试项目下使用ASP.net网站配置文件的分步过程。点击链接http://forums.asp.net/t/1454799.aspx/1
答案 5 :(得分:1)
有一个名为CheckMyConfig
的商业工具用于验证.NET
配置文件,该文件识别给定配置文件中的设置,并尝试验证它们。
可能的设置类型包括数据库连接字符串,文件,文件夹,IP地址,主机名和URL。
该工具允许您执行多项检查,包括打开数据库连接,访问文件夹,请求特定URL等。
有一个独立版本,但该工具还具有Visual Studio集成和一个简单的API,您可以使用它将该工具嵌入您自己的应用程序中,按顺序
在应用启动时执行配置'sanity check'
。
答案 6 :(得分:0)
在您的单元测试项目中,添加一个app.config文件,并添加您希望用于测试的web.config文件中的设置。