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

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'文件夹中),因此它似乎永远无法在测试执行期间找到那些外部文件。我尝试了后期构建操作使其正常工作,但没有成功。有没有办法在运行时将这些外部文件复制到正确的输出文件夹中?

3个回答

11

找到了:

如果你编辑测试运行配置(通过双击放置在“解决方案项”解决方案文件夹中的 .testrunconfig 文件,当你添加一个新的单元测试时),你会得到一个测试运行配置对话框。那里有一个名为“部署”(Deployment)的部分,你可以在其中指定来自解决方案中任何位置的文件或整个文件夹,在运行时将它们与编译后的程序集一起复制到正确的文件夹。

通过这种方式,我现在实际上只需要在一个外部 .config 文件集中定义大部分配置,并且让它们随着每个测试的运行而自动复制出来。


4
请注意,在VS2008和VS2010之间,以下文件已更名:"localtestrun.testrunconfig"(.NET v3.5)和"Local.testsettings"(.NET v4.0):http://social.msdn.microsoft.com/Forums/en/vststest/thread/1422bfb0-a637-430c-a2bf-0b199a02f013 - Jonas at Software Journey

10

当尝试在 Visual Studio 之外运行测试时,测试运行配置有点棘手。

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

我更喜欢 DeploymentItem 属性。

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

使测试独立于.testrunconfig文件。

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配置文件,并成功运行。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接