测试:我*想*测试web.config

时间:2010-03-05 17:47:49

标签: asp.net unit-testing web-config web-testing

我想在我的一个项目上进行一些单元测试。这是一个Web项目,除了开发副本之外,该程序只有一个副本。

我想写一些将使用web.config的单元测试。我理解通常情况下,测试人员会将这种外部依赖关系存根,因为他希望在没有测试的情况下测试代码,具体取决于web.config保持某些值。

但是,我的项目中的web.config应该始终保持某些值,并且我希望单元测试如果设置为无效值则会失败。例如,其中一个值是SQL连接字符串。

我想编写一个测试来读取web.config的连接字符串。我设想测试可以连接到具有连接字符串的服务器,并且可能执行一个非常简单的命令,如SELECT system_user;。如果命令成功执行并返回测试通过的内容。否则,它失败了。我希望从我正在测试的项目中的web.config读取连接字符串。

当然,ConfigurationManager通常不会在另一个项目中查找web.config。我可以手动将web.config从原始项目复制到测试项目,但是我必须在每次测试之前完成这项工作,并且我无法指望其他任何人这样做。

如何让我的测试项目从另一个项目中读取web.config

7 个答案:

答案 0 :(得分:4)

听起来您正在尝试验证web.config中的设置,这是部署级别的问题,与单元测试不同。

单元测试告诉您核心逻辑正在按预期执行; 部署验证告诉您应用程序已正确安装和配置,并且可以安全使用。单元测试对开发人员有意义,部署验证对部署应用程序的最终用户或管理员有意义。

在这种情况下,我喜欢在我的应用程序中构建一个“系统控制台”。此控制台包含许多自我诊断检查,例如:

  1. 确保正确配置连接字符串
  2. 确保任何第三方服务可用且正常运行
  3. 确保所有配置设置都有效且不会导致运行时错误(例如路径存在,Web用户帐户在需要时具有读/写访问权限等)
  4. 我强烈建议您考虑将此类配置和部署验证与您的单元测试套件分开。它不仅可以简化您的工作(因为您不会 从另一个项目加载配置文件),但它也是客户真正非常喜欢的那种工具:)

答案 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文件中的设置。