테스트 실행 폴더에 MSTest 복사 파일


108

XML 파일을 읽고 파싱해야하는 테스트가 있습니다. 매번 테스트 실행 폴더에이 파일을 복사하려면 어떻게해야합니까?

XML 파일은 "Copy if newer"로 설정되고 컴파일 모드는 "none"으로 설정됩니다 (실제로 컴파일 할 수있는 것이 아니기 때문에).

답변:


131

속성 사용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");
        }
    }
}

17
DeploymentItem 특성은 클래스 수준에서 지정하여 클래스의 모든 테스트에 영향을 줄 수도 있습니다.
Hannes Nel

24
배포 하위 디렉터리 [DeploymentItem ( "SubFolder \ testFile1.xml", "SubFolder")]에도 항목을 포함 할 하위 폴더에 항목이있는 경우
omgtitb

31
Thomas의 의견에 더하여 RelativePathRoot의 기본값은 솔루션 폴더이므로 솔루션이 다음과 같으면 (.. \ SolutionFolder \ TestProject \ TestData \ aFile.txt) 배포 항목은 다음과 같습니다. ([DeploymentItem (@ "TestProject \ TestData \ aFile.txt", "TestData")]) .. 그리고 this .. (string file = @ "TestData \ aFile.txt";)를 사용하여 테스트에서 파일을 참조합니다.
Michael Dausmann

6
VS2010 용 DeploymentItemAttribute 설명서 : 이 속성은 테스트 메서드 또는 테스트 클래스에서 지정할 수 있습니다.
Alex Che

12
언급하지 않은 대부분의 게시물은이 작업을 수행 할 수없는 경우 "배포 활성화"확인란을 선택해야한다는 것입니다. 테스트-> 테스트 설정 편집->으로 이동하면 찾을 수 있습니다. 로컬 (local.testsettings)-> 배포 탭. 방금이 작업을 수행 한 다음 DeploymentItem이 제대로 작동했습니다.
Dave

26

솔루션에 대한 TestSettings 파일을 제공하면 "배포 활성화"옵션의 선택을 취소하고 mstest가 ...TestResults\...\out추가 파일을 복사하지 않는 폴더에서 실행 하지 못하도록 할 수 있습니다 (배포 옵션으로 지정하지 않는 한). .

TestSettings ()에서 배포, 폴더 추가 옵션을 사용하면 배포 항목이 모두 임시 실행 폴더 (외부)에 직접 (플랫) 복사되는 것처럼 보이기 때문에 보존 된 폴더 구조에있는 추가 파일에 의존하는 경우에도 유용합니다. 위의 답변은 각 항목을 자체 DeploymentItem으로 추가하면 구조를 유지할 수 있음을 제안합니다).

저에게는 오래 전에 다른 이유로 (배포 활성화가 선택되지 않은) TestSettings 파일을 만들었 기 때문에 Visual Studio에서 직접 테스트를 실행하는 것이 잘 작동했지만 (즉, 해당 구조의 내 추가 파일이 테스트에서 발견되어 사용되었습니다) TeamCity가 아닌 경우 TestSettings 파일을 사용해야한다고 지정하지 않았기 때문에 테스트를 실행하기 위해 mstest를 실행했습니다.

Visual Studio에서 TestSettings 파일을 만들려면 솔루션을 마우스 오른쪽 단추로 클릭 하고 새 항목을 선택한 다음 TestSettings 템플릿을 선택합니다. mstest.exe의 명령 프롬프트에서 TestSettings 파일을 사용하려면 옵션을 /testsettings:C:\Src\mySolution\myProject\local.testsettings 추가하거나 적절한 경로를 사용하여 TeamCity에서 추가 명령 줄 옵션으로 추가하십시오.



3

나에게 가장 좋은 해결책은 특히 여러 테스트에 동일한 데이터 파일이 필요한 경우 testsettings를 사용하는 것입니다.

먼저 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에서 자동으로 새로 고쳐지지 않습니다. 따라서 testsettings에서 배포에 파일 / 폴더를 추가 한 후 솔루션 파일을 다시 열고 테스트를 실행해야합니다.


2

Visual Studio 2012에서 vstest.console.exe (기본 제공 테스트 실행기)는 출력 dir을 현재 경로로 사용하여 실행됩니다. 즉, 테스트에서 사용할 항목에 대해 '항상 복사'또는 '최신 인 경우 복사'속성을 사용하여 솔루션에 항목 만 포함하면됩니다. 일반적인 경우에는 DeploymentItem 속성이 필요하지 않습니다. output / test 디렉터리의 명령 줄에서 vstest.console.exe를 실행할 때도 마찬가지입니다.

별도의 폴더가 사용되는 경우가 있으며 그중 하나는 DeploymentItem 특성을 사용하는 경우입니다. 자세한 내용은 여기 를 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.