11

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

4

3 回答 3

11

找到了:

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

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

于 2008-09-30T12:43:20.360 回答
10

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

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

我更喜欢这个DeploymentItem属性。

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

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

于 2009-03-12T11:56:05.487 回答
1
  1. 把它写在你的connectionString中。第一个ConnectionString.config不存在。

    <"connectionStrings configSource="ConnectionString.config"> "

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

  3. 在 bin/debug 文件夹中创建一个名为ConnectionString.config的符号链接。

C:\Windows\Systems32>mklink "C:\Link To Folder\....\ConnectionString.config" "C:\Users\Name\Original Folder\.....\...\Secure ConnectionString.config"

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

在此处输入图像描述

于 2017-02-13T08:48:35.840 回答