如何使用“外部”配置文件(即使用configSource)和MSTest单元测试项目?

时间:2008-09-30 12:41:02

标签: .net unit-testing mstest

为简单起见,我通常会将大量配置(即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'文件夹),它似乎永远无法找到那些外部文件测试正在执行。我已经尝试过使用后期构建操作来完成这项工作,但没有运气。有没有办法在运行时将这些外部文件复制到正确的输出文件夹中?

3 个答案:

答案 0 :(得分:11)

找到它:

如果您编辑测试运行配置(通过双击添加新单元测试时放入“解决方案项”解决方案文件夹中的.testrunco​​nfig文件),您将获得一个测试运行配置对话框。有一个名为“部署”的部分,您可以在解决方案中的任何位置指定文件或整个文件夹,可以在运行时将已编译的程序集复制到正确的文件夹中。

通过这种方式,我现在可以在一组外部.config文件中定义大部分配置,并在每次测试运行时自动复制它们。

答案 1 :(得分:10)

尝试在Visual Studio之外运行测试时,测试运行配置有点尴尬。

对于使用MSTest的命令行执行,保持“干净”变得非常麻烦。 它们也是解决方案的“全局”,因此将为每个测试项目复制外部文件。

我更喜欢DeploymentItem属性。

[TestMethod]
[DeploymentItem(@"test_data.file")]
public void FooTest()
{...}

使测试独立于.testrunco​​nfig文件。

答案 2 :(得分:1)

  1. 在connectionString中写下这个。第一个 ConnectionString.config 不存在。

    &lt;&#34; connectionStrings configSource =&#34; ConnectionString.config&#34;&gt; &#34;

  2. 以管理员权限打开命令提示符(CMD)。

  3. 在bin / debug文件夹中创建名称为 ConnectionString.config 的符号链接。
  4. C:\的Windows \ Systems32&GT; mklink "C:\Link To Folder\....\ConnectionString.config" "C:\Users\Name\Original Folder\.....\...\Secure ConnectionString.config"

    最后它在指定位置创建ConnectionString配置文件。并且成功运作。

    enter image description here