MSTest复制文件到测试运行文件夹

问题描述 投票:0回答:6

我有一个测试,需要读入然后解析 XML 文件。我怎样才能每次都将此文件复制到测试运行文件夹中?

XML 文件设置为“如果较新则复制”,编译模式为“无”(因为它不是真正可编译的东西)

visual-studio mstest
6个回答
138
投票

使用

DeploymentItem
属性

    using System;
    using System.IO;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using CarMaker;
    
    namespace DeploymentTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod()]
            [DeploymentItem("testFile1.xml")]
            public void ConstructorTest()
            {
                string file = "testFile1.xml";
                Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
                    " did not get deployed");
            }
        }
    }

28
投票

看来,如果您为解决方案提供 TestSettings 文件,那么您可以取消选中“启用部署”选项,并阻止 mstest 尝试从

...TestResults\...\out
文件夹运行,该文件夹不会复制您的额外文件(除非您制作它们)部署选项)。

如果您依赖于保留的文件夹结构中的额外文件,这也很有用,因为如果您使用 TestSettings 中的“部署”、“添加文件夹”选项,部署项目似乎都会直接(平面)复制到临时运行文件夹(输出)中(上面的答案表明,如果将每个项目添加为其自己的 DeploymentItem,则可以保留结构)。

对我来说,直接在 Visual Studio 中运行测试效果很好(即我的结构中的额外文件被测试找到并使用),因为我很久以前出于另一个原因创建了一个 TestSettings 文件(未选中“启用部署”),但当TeamCity 运行 mstest 来运行测试,因为我没有指定应使用 TestSettings 文件。

要在 Visual Studio 中创建 TestSettings 文件,请右键单击“解决方案”并选择“新建项”,然后选择 TestSettings 模板。 要在 mstest.exe 的命令提示符下使用 TestSettings 文件,请添加选项 /testsettings:C:\Src\mySolution\myProject\local.testsettings(或使用适当的路径在 TeamCity 中添加为额外的命令行选项)

    


8
投票
.testrunconfig 设置


5
投票

首先创建一个testsettings文件,并添加你需要的部署项(文件或文件夹名称):

<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="Folder1\TestScripts\test.xml" outputDirectory="TestScripts"/> <DeploymentItem filename="Folder2\TestData\" outputDirectory="TestData"/> </Deployment> <...../>

    在 Visual Studio 中运行,使用“测试\测试设置”菜单中的“选择测试设置文件”来选择新的测试设置
  • 运行 mstest,使用 /testsettings 参数让 mstest 使用您的测试设置。

2
投票
您可以在包含具有 AssemblyInitialize 属性的方法的类中定义 DeploymentItem。然后,您就可以确定无论您运行哪个测试,文件都会被复制。

不幸的是,DeploymentItem 属性仅在包含您正在运行的测试的类上执行。因此,如果您有 10 个使用同一组文件的测试类,则必须向所有这些类添加该属性。

还发现 *.testsettings 文件中的更改不会在 Visual Studio 中自动刷新。因此,在测试设置中将文件/文件夹添加到部署中后,您必须重新打开解决方案文件,然后运行测试。


2
投票

在某些情况下,会使用单独的文件夹,其中之一是当您使用 DeploymentItem 属性时。请参阅

此处

了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.