为简单起见,我通常将大量配置(即app.config和web.config的内容)拆分为单独的.config文件,然后使用'configSource'属性从主配置文件中引用它们.例如:
然后将所有键/值对放在该appSettings.config文件中,而不是在主配置文件中使用此内联:
...
这通常适用于应用程序本身,但在尝试编写单元测试时遇到问题,无论出于何种原因,单元测试需要从存储在其中一个外部文件中的配置部分获取某些值.(我知道大多数这些都可能被认为是"集成测试",因为它们依赖于配置系统,我也有"纯单元测试",但那些不是问题.我真的在寻找测试是否正确检索这些配置值并以正确的方式影响行为).
由于MSTest如何编译并将输出复制到与每次测试运行不同的模糊文件夹(而不是像你想象的那样到'bin'文件夹),它似乎永远无法在测试时找到那些外部文件正在执行.我已经尝试过使用后期构建操作来完成这项工作,但没有运气.有没有办法在运行时将这些外部文件复制到正确的输出文件夹中?
找到了:
如果编辑测试运行配置(通过双击在添加新单元测试时放入"解决方案项"解决方案文件夹中的.testrunconfig文件),则会获得测试运行配置对话框.有一个名为"部署"的部分,您可以在解决方案中的任何位置指定文件或整个文件夹,可以在运行时将已编译的程序集复制到正确的文件夹中.
通过这种方式,我现在可以在一组外部.config文件中定义大部分配置,并在每次测试运行时自动复制它们.
尝试在Visual Studio外部运行测试时,测试运行配置有点尴尬.
对于使用MSTest的命令行执行,保持"干净"变得非常麻烦.它们也是解决方案的"全局",因此将为每个测试项目复制外部文件.
我更喜欢这个DeploymentItem
属性.
[TestMethod] [DeploymentItem(@"test_data.file")] public void FooTest() {...}
使测试独立于.testrunconfig文件.