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

时间:2009-10-13 17:15:22

标签: asp.net visual-studio-2008 unit-testing testing

我正在使用VS2008中的内置测试框架,我希望能够编写一个测试,确保所有预期的web.config设置都已定义,以便如果意外删除或更改我的测试套件将检测它,而不必在运行时方案中进行测试。我该如何设置呢?

我不想设置我的web.config的模型,因为我不想维护两个版本,这会使我的测试无效,因为我真的想要捕获项目的web.config是的事实正确的。

任何建议,替代方案,提示?

解决方案:我最终使用预建中的副本进行了一次更改。在副本上,我将web.config重命名为app.config,以便测试项目自动获取它。

我试图按照建议拆分配置文件,但我遇到的问题是当测试项目运行时,它实际上没有用完bin目录(将配置文件设置为'Content'类型将复制到),而是复制到已预定义的结果目录。我无法弄清楚如何将额外的文件复制到此结果目录中,因此无法找到配置文件。

3 个答案:

答案 0 :(得分:2)

我正在使用预构建事件将工作web.config复制到您的测试项目目录。

将测试项目的预构建事件的命令行设置为如下字符串:

copy $(SolutionDir)\YourWebAppDir\web.config $(ProjectDir) /y

之后,您的测试将始终使用实际的web.config版本运行。

pcampbell's answer的评论:

我认为如果您使用configSource属性,您可以将其设置为Web应用程序的web.config和测试项目的app.config中的相同路径,这样就不必使用构建事件。< / p> 抱歉,我还不能发表评论。

答案 1 :(得分:2)

要扩展bniwredyc's answer,或许请考虑:

  • 重构您的web.config以引用appSettings.config或类似的新配置文件。

  • 将您的项目的web.config修改为:

    <appSettings configSource="appSettings.config" />

  • 修改单元测试项目的app.config以使用此文件。

  • 修改帖子或预构建事件以仅复制此文件。

  • 这也有助于在Test / Staging / Prod

  • 中轻松部署

答案 2 :(得分:0)

最终,web.config是一个XML文件。您可以生成一个模式来验证所需的部分是否存在以及是否已填充所需的值。显然,您无法在上下文中验证配置可能包含的任何类型的业务逻辑,但您可以结合使用XSD验证以及用于解析文件中条件的轻量级类。

与复制预构建事件结合使用,您实际上可以为您的生产质量配置创建一个非常好的测试工具。