XML 파일을 읽고 파싱해야하는 테스트가 있습니다. 매번 테스트 실행 폴더에이 파일을 복사하려면 어떻게해야합니까?
XML 파일은 "Copy if newer"로 설정되고 컴파일 모드는 "none"으로 설정됩니다 (실제로 컴파일 할 수있는 것이 아니기 때문에).
XML 파일을 읽고 파싱해야하는 테스트가 있습니다. 매번 테스트 실행 폴더에이 파일을 복사하려면 어떻게해야합니까?
XML 파일은 "Copy if newer"로 설정되고 컴파일 모드는 "none"으로 설정됩니다 (실제로 컴파일 할 수있는 것이 아니기 때문에).
답변:
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");
}
}
}
솔루션에 대한 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에서 추가 명령 줄 옵션으로 추가하십시오.
나에게 가장 좋은 해결책은 특히 여러 테스트에 동일한 데이터 파일이 필요한 경우 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가 테스트 설정을 사용하도록합니다.
AssemblyInitialize 특성이있는 메서드를 보유하는 클래스에서 DeploymentItem을 정의 할 수 있습니다. 그런 다음 실행하는 테스트에 관계없이 파일이 복사되었는지 확인합니다.
불행히도 DeploymentItem 속성은 실행중인 테스트가 포함 된 클래스에서만 실행됩니다. 따라서 동일한 파일 세트를 사용하는 10 개의 테스트 클래스가있는 경우 모든 파일에 속성을 추가해야합니다.
또한 * .testsettings 파일의 변경 사항은 Visual Studio에서 자동으로 새로 고쳐지지 않습니다. 따라서 testsettings에서 배포에 파일 / 폴더를 추가 한 후 솔루션 파일을 다시 열고 테스트를 실행해야합니다.
Visual Studio 2012에서 vstest.console.exe (기본 제공 테스트 실행기)는 출력 dir을 현재 경로로 사용하여 실행됩니다. 즉, 테스트에서 사용할 항목에 대해 '항상 복사'또는 '최신 인 경우 복사'속성을 사용하여 솔루션에 항목 만 포함하면됩니다. 일반적인 경우에는 DeploymentItem 속성이 필요하지 않습니다. output / test 디렉터리의 명령 줄에서 vstest.console.exe를 실행할 때도 마찬가지입니다.
별도의 폴더가 사용되는 경우가 있으며 그중 하나는 DeploymentItem 특성을 사용하는 경우입니다. 자세한 내용은 여기 를 참조하십시오.