9

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

我想编写一些将使用web.config. 我理解通常情况下,测试人员会剔除这种外部依赖关系,因为他想根据web.config持有的某些值在没有测试的情况下测试代码。

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

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

当然,通常不会在另一个项目中ConfigurationManager寻找。web.config我可以手动将web.config原始项目中的内容复制到测试项目中,但我必须在每次测试之前都这样做,而且我无法指望其他人这样做。

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

4

7 回答 7

4

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

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

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

  1. 确保正确配置连接字符串
  2. 确保任何第 3 方服务可用且正常运行
  3. 确保所有配置设置都有效并且不会导致运行时错误(例如存在路径、Web 用户帐户在需要时具有读/写访问权限等)

我强烈建议您考虑将这种配置和部署验证从您的单元测试套件中分离出来。它不仅会简化您的工作(因为您不必另一个项目加载配置文件),而且它也是客户非常非常喜欢的那种工具 :)

于 2010-03-05T18:15:10.437 回答
3

您可以使用ConfigurationManager.OpenXXX()方法加载和浏览其他配置文件。

该类WebConfigurationManager专门有一个打开 web.config 文件的方法,我链接到的文档页面有更多的代码示例。加载配置对象后,您可以探索它的部分和键。

var cfm = new ConfigurationFileMap("path/to/web.config");
var config = WebConfigurationManager.OpenMappedWebConfiguration(cfm);
于 2010-03-05T18:03:12.197 回答
1

我问了一个类似的问题,你可能想看看:

如何测试所有预期的 web.config 设置是否已定义?

我最终让它工作了,但令人讨厌的部分是我的源代码控制不断锁定复制过来的配置文件。您还可以将 web.config 重命名为 app.config,以便将其编译为非 Web 项目。

于 2010-03-05T18:39:56.053 回答
1

听起来你想用大锤压扁一只蚊子。为什么不手动执行此操作,作为部署清单的一部分;有一个任务来手动确认connectionString。

或者,如果您想使其自动化,请编写一个程序来检查 connectionString,将其附加到您的持续集成服务器(假设您有一个),如果 connectionString 错误,则构建失败。

将单元测试用于测试代码而不是配置。

于 2010-03-05T18:53:12.353 回答
1

有一个名为CheckMyConfig验证.NET配置文件的商业工具,它识别给定配置文件中的设置,并尝试验证它们。

可能的设置类型包括数据库连接字符串、文件、文件夹、IP 地址、主机名和 URL。

该工具允许您执行许多检查,包括打开数据库连接、访问文件夹、请求特定 URL 等。

有一个独立版本,但该工具还具有 Visual Studio 集成和一个简单的 API,您可以使用该 API 将该工具嵌入到您自己的应用程序中,以便'sanity check'在应用程序启动时执行配置。

于 2014-05-07T06:21:02.897 回答
1

如果您想将原始 web.config 文件从您的网站使用到您的单元测试项目而不复制它,那么您可以修改 VS Local-Test-Settings

这是在单元测试项目下使用 ASP.net 网站配置文件的分步过程。按照链接http://forums.asp.net/t/1454799.aspx/1

于 2012-01-04T18:39:46.033 回答
0

在您的单元测试项目中,添加一个 app.config 文件并添加您希望用于测试的 web.config 文件中的设置。

于 2010-03-05T18:34:52.243 回答