MSTest部署项目只有在项目testing设置文件中才有效?
我似乎无法掌握如何configurationMSTest部署项目。 我已经能够通过修改项目的testing设置文件来使它们正常工作,但是这不太理想 – 部署项目configuration与单独的testing分开,文件path似乎被存储为绝对path,除非文件是在解决scheme文件夹下。
我不应该能够在[TestClass]
或[TestMethod]
上使用[DeploymentItem]
属性添加部署项目,而无需创build/修改项目testing设置文件? 我如何做到这一点?
(坦率地说,我不明白需要一个单独的部署项目configuration – 为什么不使用现有的“复制到输出目录”设置项目文件,应该是部署项目?)
好的 – 这里的这篇文章帮助我找出了需要做什么而不必手动添加项目到.testsettings
文件。
步骤1 – 启用MS Test DeploymentItem
属性。
首先,我们需要打开/启用DeploymentItem
属性。
转到testing – >编辑testing设置 – >当前活动设置..例如::本地(local.testsettings)
现在开始部署 ,并确保启用部署打勾打开。 (默认情况下closures)。
第2步 – 检查文件的属性
现在我们需要确保你希望在unit testing中使用的文件在编译时被设置为复制到BIN目录。 只有在BIN目录中的文件才能用于MS Testunit testing。 为什么? 因为每次运行MStesting时,都必须复制源文件…这意味着它会复制当前BIN目录文件(用于当前configuration)。
例如…当前configuration是debugging (而不是发布)。
然后我添加我的文件…(注意项目中的文件夹结构)…
然后确保在编译项目时总是将该文件复制到bin目录。
专业小贴士:复制始终也可以,但始终将源文件复制到目标文件上,即使它们是相同的。 这就是为什么我喜欢复制,如果更新…但是什么漂浮你的船
好的女士们和男士们 – 还在我身边? Wikid。
当我们编译时,这个文件现在应该存在于Bin目录中….
第3步 – 现在使用DeploymentItem属性
好的,现在我们终于可以在代码中使用DeploymentItem
属性。 当我们这样做,这告诉MSTest复制文件(从相对于bin目录的位置)到新的MStesting目录…
[TestMethod] [DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")] public void Parsing100LogFileEntriesReturnsANewParsedLogEntriesWith100Items() { // Arrange. const string fileName = @"Test Data\100LogEntries.txt"; ILogEntryService logEntryService = new PunkBusterLogEntryService(); // Act. var parsedLogEntries = logEntryService.ParseLogFile(fileName, 0); // Assert. Assert.IsNotNull(parsedLogEntries); Assert.AreEqual(100, parsedLogEntries.LogEntries.Count); // Snipped the remaining asserts to cut back on wasting your time. }
所以让我们来分解一下
[TestMethod]
我们都知道那是什么
[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]
从bin目录开始,进入Test Data
文件夹,并将100LogEntries.txt
文件复制到MS Test创build的根MS Test输出目录中的目标文件夹Test Data
,以便在每次运行testing时创build。
所以这是我的输出文件夹结构看起来像。 (对不起所有的混乱…)
瞧! 我们有编程的部署文件。
PRO TIP#2 – 如果您在DeploymentItem
属性中不使用第二个string参数,则该文件将被复制到当前MS Test的根OUT文件夹中。
const string fileName = @"Test Data\100LogEntries.txt";
现在该文件的path是相对于当前MS Test的OUT
文件夹。 因此,我明确说, 将文件部署到一个名为Test Data
的目录…所以我需要确保我在代码中正确引用,当我想要读取文件。
只是为了确认 – >该文件名的完整path被翻译成类似于C:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data
.. for C:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data
current MStesting。
HTH。
现在有一个独angular兽的图片,阅读这么多:)
我以为我会分享我遇到MSTest和部署项目的问题。 如果您从“testing结果”窗口第二次或更多次debugging/运行testing,它将使用之前运行的设置。 但是,如果您从“testing视图”窗口debugging/运行相同的testing,它将使用最新的设置。 我试图弄清楚为什么当我从“testing结果”窗口的同一个testing中开始debugging时没有使用对Local.testsettings的更改。
这是“testing结果”窗口(在对Local.testsettings进行更改后,请勿从此处开始testing):
这是“testing视图”窗口(在对Local.testsettings进行更改后,请从这里开始testing):
我希望这样可以节省一些人在未来的头痛。
在Visual Studio 2012中,输出目录是工作目录,这意味着一般情况下(没有特定的每个testing或每个类的部署项目)不需要DeploymentItem属性。 这意味着,如果您不需要使用DeploymentItem属性(如果有一组文件需要您所有的testing使用,或者您对每个TestClass / TestMethod具有单独的部署依赖关系)并不太过分。
您只需点击Project | 显示所有文件,并在Visual Studio中包含子文件夹和文件,并将“复制总是”或“如果更新”复制到项目中,并将文件复制到您的输出目录并且层次不变。
从命令行运行vstest.console.exe时也是如此。 看到这里的细节。
更新
有些情况下,默认目录不会是输出目录。 特别是当您selectRun All Tests
,默认path将位于TestResults\Deploy_...
,同样适用于使用runsettings
文件或testing使用DeploymentItems
当您不使用DeploymentItems时,输出目录将成为默认目录:
- 您在Visual Studio中右键单击testing,然后select运行/debugging或
- 你使用vstest.console.exe从命令行运行。
如果在单独的testing用例中需要单独的部署项目,那么请继续在每个testing用例中使用[DeploymentItem("string file path")]
属性。
对于我的情况,我添加了DeploymentItem属性,它不能立即生效。 我必须closures并重新打开解决scheme,然后configuration的DeploymentItem属性才会生效。
看起来像VS.NET 2012默认情况下工作
在VS 2012中,您只需要将log4net.properties(或log4net的任何configuration文件)文件复制(如果更新)。 (右键单击log4net.properties文件来调出属性并进行configuration)