为简单起见,我通常会将大量配置(即app.config和web.config的内容)拆分为单独的.config文件,然后使用'configSource'属性从主配置文件中引用它们。例如:
<appSettings configSource="appSettings.config"/>
然后将所有键/值对放在appSettings.config文件中,而不是在主配置文件中使用此内联:
<appSettings>
<add key="FirstKey" value="FirstValue"/>
<add key="SecondKey" value="SecondValue"/>
...
</appSettings>
这通常适用于应用程序本身,但在尝试编写单元测试时会遇到问题,无论出于何种原因,单元测试需要从存储在其中一个外部文件中的配置部分获取某些值。 (我知道大多数这些都可能被认为是“集成测试”,因为它们依赖于配置系统,我也有“纯单元测试”,但那些不是问题。我真的在寻找测试正确检索这些配置值并以正确的方式影响行为。)
由于MSTest如何编译并将输出复制到与每次测试运行不同的模糊文件夹(而不是像你想象的那样到'bin'文件夹),它似乎永远无法找到那些外部文件测试正在执行。我已经尝试过使用后期构建操作来完成这项工作,但没有运气。有没有办法在运行时将这些外部文件复制到正确的输出文件夹中?
答案 0 :(得分:11)
找到它:
如果您编辑测试运行配置(通过双击添加新单元测试时放入“解决方案项”解决方案文件夹中的.testrunconfig文件),您将获得一个测试运行配置对话框。有一个名为“部署”的部分,您可以在解决方案中的任何位置指定文件或整个文件夹,可以在运行时将已编译的程序集复制到正确的文件夹中。
通过这种方式,我现在可以在一组外部.config文件中定义大部分配置,并在每次测试运行时自动复制它们。
答案 1 :(得分:10)
尝试在Visual Studio之外运行测试时,测试运行配置有点尴尬。
对于使用MSTest的命令行执行,保持“干净”变得非常麻烦。 它们也是解决方案的“全局”,因此将为每个测试项目复制外部文件。
我更喜欢DeploymentItem
属性。
[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}
使测试独立于.testrunconfig文件。
答案 2 :(得分:1)
在connectionString中写下这个。第一个 ConnectionString.config 不存在。
&lt;&#34; connectionStrings configSource =&#34; ConnectionString.config&#34;&gt; &#34;
以管理员权限打开命令提示符(CMD)。
C:\的Windows \ Systems32&GT; mklink "C:\Link To Folder\....\ConnectionString.config" "C:\Users\Name\Original Folder\.....\...\Secure ConnectionString.config"
最后它在指定位置创建ConnectionString配置文件。并且成功运作。