2017-06-13 38 views
1

我有一个测试项目,我想从MSTEST执行。这个项目有一个App.config和一个ConnectionString.config文件。 ConnectionStrings部分重定向到更高版本。MSTest.exe生成项目,但不部署设置文件

<connectionStrings configSource="ConnectionStrings.config" /> 

当我运行MSTEST,该项目建成并大部分文件被复制,但ConnectionStrings.config文件不是,尽管它的属性被设置为内容和复制始终。

VS2015 File Properties

MSTEST.EXE从项目目录运行这个(简单吗?)命令行:

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

假设MSTest.exe是路径,它运行时,它生成项目并创建一个目录,如XXXXXXXXXXXX_YYYY-MM-DD HH_MM-SS,但输出子目录不包含ConnectionStrings.config文件(应根据提问复制,对吧?)

回答

1

编辑

因此,在2017年VS社区版,我决定尝试做一个简单的测试来复制你看到的,我做到了。从IDE运行它,DeploymentItem属性按预期工作,但不是从mstest。如果这真的是一个bug,我可能会期望人们会看到这个,但也许人们在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命令行执行。


Original Post

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

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

+0

MSTEST.exe创建最新版本的副本并使用它运行测试。这里的问题是,MSTEST不会复制原始buld文件夹中的某些配置文件。是的,我确实建立了项目,是的,项目构建具有所需的文件,但MSBUILD不会将这些字段复制到最终目录。 –

+0

@Y。 Ecarri:我能够在我的机器上重现您的问题。我能够使它与testsettings文件一起工作;也许这会对你有用。 – Kdawg

+0

非常感谢!这工作。 –

1

您可以尝试应用[部署项(“ConnectionString s.config“)]属性对你的测试类?

+0

谢谢。我会尝试告诉你结果 –

+0

不幸的是,它没有解决问题 –