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)

Interesting Posts