我有一个测试项目,我想从MSTEST执行。该项目有一个App.config和一个ConnectionString.config文件。 ConnectionStrings部分被重定向到更晚的部分。
<connectionStrings configSource="ConnectionStrings.config" />
当我运行MSTEST时,项目已构建并且大多数文件都被复制,但ConnectionStrings.config
文件不是,尽管其属性始终设置为内容和复制。
使用此(简单?)命令行从项目目录运行MSTEST.EXE:
MSTest.exe /testcontainer:bin\Debug\Tests.dll /resultsfile:%ts%
假设MSTest.exe在路径中,它运行,它构建项目并创建一个类似XXXXXXXXXXXX_YYYY-MM-DD HH_MM-SS
的目录,但输出子目录不包含ConnectionStrings.config文件(应该根据seetings,对吗?)
答案 0 :(得分:1)
您可以尝试在测试类上应用[部署项目(&#34; ConnectionStrings.config&#34;)]属性吗?
答案 1 :(得分:1)
<强>被修改强>
所以,在VS 2017社区版上,我决定尝试做一个简单的测试来复制你所看到的内容,我做了。从IDE运行它,DeploymentItem
属性按预期工作,但不是mstest
。如果它确实是一个错误的话,我本以为人们会看到这个,但也许人们还没有尝试过VS 2017。
无论如何,最终对我有用的是创建一个testsettings文件,其中指定了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
一样工作,因此文件名需要相对于输出目录(假设您没有在您正在使用的testsettings文件中覆盖它;因为你已经将它的ConnectionStrings.config复制到输出目录了,我认为这对你有用。或者,如果你不想将它复制到你的输出中,你可以把它..\..\ConnectionStrings.config
。构建中的文件夹,但确实希望使用mstest
复制。
然后只需在/testsettings:<testsettingsfilename>
命令行执行中添加mstest
。
原帖
除非我非常错误,否则运行mstest.exe只运行已经构建的测试项目,并且不会返回并构建测试项目(它怎么可能呢?它是一个测试工具,而不是msbuild,你只是将它指向测试DLL,而不是项目文件)。因此,如果您只是运行mstest而不是从Visual Studio或通过msbuild或其他任何方式构建项目,那么您实际所做的更改将无法实现,直到您再次实际构建项目为止。
您是否可以验证您是否实际使用SMA引用的DeploymentItem
属性重新构建了测试项目(可能会检查您的Tests.DLL
上次更新为快速的第一步),然后针对新建的mstest
运行Tests.DLL
命令?根据我自己的知识和answer about copying a file to mstest's test folder,我希望你会看到你的配置文件被复制到测试运行目录中,只要该配置文件首先存在。