2017-06-13 40 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

不幸的是,它沒有解決問題 –