MSTest.exe 构建项目但不部署设置文件

MSTest.exe builds project but doesn't deploy settings file

我有一个要从 MSTEST 执行的测试项目。该项目有一个 App.config 和一个 ConnectionString.config 文件。 ConnectionStrings部分重定向到后面。

<connectionStrings configSource="ConnectionStrings.config" />

当我 运行 MSTEST 时,项目被构建并且大部分文件被复制,但是 ConnectionStrings.config 文件没有,尽管它的属性设置为 Content 和 Copy always。

MSTEST.EXE 是 运行 来自项目目录的这个(简单?)命令行:

MSTest.exe /testcontainer:bin\Debug\Tests.dll /resultsfile:%ts%

假设 MSTest.exe 在路径中,它 运行s,它构建项目并创建一个类似于 XXXXXXXXXXXX_YYYY-MM-DD HH_MM-SS 的目录,但输出子目录不包含 ConnectionStrings.config 文件(应该是按照设置复制的吧?)

您可以尝试在您的测试 class 上应用 [Deployment Item("ConnectionStrings.config")] 属性吗?

已编辑

所以,在 VS 2017 社区版上,我决定尝试做一个简单的测试来复制你所看到的,我做到了。 运行 它来自 IDE,DeploymentItem 属性按预期工作,但不是来自 mstest。如果它真的是一个错误,我本以为人们以前会看到它,但也许人们还没有在 VS 2017 中尝试太多。

无论如何,最终对我有用的是创建一个测试设置文件,其中指定了 DeploymentItem。这是我使用的文件:

<TestSettings name="Local" id="00ebe0c6-7b64-49c0-80a5-09796270f111" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
   <Description>These are default test settings for a local test run</Description>
   <Deployment>
     <DeploymentItem filename="ConnectionStrings.config"/>
   </Deployment>
</TestSettings>

如果您想指定,还有一个 outputDirectory 属性。 DeploymentItem 节点似乎与 DeploymentItem 一样工作,因此文件名需要相对于输出目录(假设您没有在正在使用的测试设置文件中覆盖它;因为您已经让它复制你的 ConnectionStrings.config 到输出目录,我认为这对你有用。或者,如果你不想将它复制到构建中的输出文件夹中,你可以将它设为 ..\..\ConnectionStrings.config但确实希望使用 mstest.

复制它

然后只需将 /testsettings:<testsettingsfilename> 添加到您的 mstest 命令行执行。


原版Post

除非我大错特错,否则 运行宁 mstest.exe 只 运行s 已经构建的测试项目,并且不会返回并构建测试项目(和怎么可能?它是一个测试工具,而不是 msbuild,你只是将它指向测试 DLL,而不是项目文件)。因此,如果您只是 运行ning mstest 而不是从 Visual Studio 或通过 msbuild 或其他任何方式构建项目,那么在您实际构建项目之前,您所做的更改将不会生效再次.

您能否验证您实际上已经使用 SMA 引用的 DeploymentItem 属性重新构建了测试项目(也许检查您的 Tests.DLL 最后一次更新是快速的第一步), 然后 运行 你的 mstest 命令针对新建的 Tests.DLL?根据我自己的知识和这个 answer about copying a file to mstest's test folder,我希望您会看到您的配置文件被复制到测试 运行 目录中,只要该配置文件首先存在。