단위 테스트와 함께 작동하도록 "출력 디렉토리로 복사"를 얻으려면 어떻게해야합니까?


123

테스트가 실행되기 전에 단위 테스트 프로젝트를 빌드하면 테스트 출력이 TestResults 폴더에 복사 된 다음 테스트가 실행됩니다. 내가 가진 문제는 Debug / bin 디렉토리의 모든 파일이 TestResults 프로젝트에 복사되지 않는다는 것입니다.

Debug / bin 디렉토리에 복사 된 파일을 TestResults 폴더에도 복사하려면 어떻게해야합니까?

답변:


121

이를 수행하는 표준 방법 은 파일에 배포 항목 을 지정하는 것입니다.이 항목은 Visual Studio 테스트 메뉴 또는 솔루션 항목 폴더의 테스트 실행 구성 편집 항목을 .testrunconfig통해 액세스 할 수 있습니다 .


15
VS2010에서는 테스트 설정 / 로컬 테스트 / 편집, 목록에서 "배포"를 선택하고 "사용 ..."상자를 선택하고 파일을 추가합니다.
Marcel

18
이 변경 사항이 제대로 적용되기 전에 솔루션 (또는 Visual Studio)을 닫고 다시 열어야 할 수 있습니다.
RobV

RobV, 당신은 내 하루를 만들었습니다. 감사!
Ignacio Soler Garcia

2
코드에서 [DeploymentItem] 속성을 사용하는 경우 대화 상자에서 파일을 지정할 필요가 없습니다. 아래 @tomfanning의 코드를 참조하십시오.
Patrick Szalapski

이것은 디자인 타임에 파일이 디버그 또는 릴리스 폴더에 있는지 여부와 복사되지 않는 파일에 대한 정보가 없기 때문에 bin 또는 릴리스 폴더에서 구성 출력을 복사하는 문제를 해결하지 못합니다. 테스트 결과에서 아웃 폴더
Gurpreet

61

아래와 같이 배포 속성을 지정할 수 있습니다. 또한 "Content"및 "Copy if newer"속성을 설정해야합니다 (나중 설정에 대한 문서는 없지만 작동하도록 설정했습니다.

[TestMethod]
[DeploymentItem("mytestdata.xml")]
public void UploadTest()
{



}

3
이 기능을 활성화해야합니다. Mercel이 자신의 의견에 썼 듯이 VS2010에서 이것은 Test / Edit Test Settings / local입니다. 목록에서 "배포"를 선택하고 "사용 ..."상자를 선택합니다.
Patrick Szalapski

Visual Studio 2012 Express에서이 문제로 어려움을 겪고 있으며 한정판이기 때문에 명확한 문서를 찾기가 어려웠습니다. 이 답변에 감사드립니다.
DavidHyogo

2
잘 작동합니다. 실제로 테스트 방법 바로 위에 필요한 파일을 문서화하므로 이것이 더 나은 방법 및 대답이라고 생각합니다.
bu5hm4nn

1
DeploymentItem 특성 은 메서드 수준 대신 테스트 클래스 수준 에서 지정 될 때도 작동 함을 발견했습니다 .
Jon Schneider

10

속성이 작동 Test -> Edit Test Settings -> Local -> Deployment하려면 아래에서 "배포 활성화"를 켜야했습니다 [DeploymentItem].


이것은 사실입니다 ... 방금 활성화했고 이제 속성이 작동합니다. 감사!
Miguel Angelo

다른 답변에 대한 내 의견에서 언급했듯이 Visual Studio 2012 express에서 동일한 문제로 어려움을 겪고 있으며 두 가지 답변이 마침내 나에게 해결책을주었습니다.
DavidHyogo

5

필요에 따라 세 가지 대답이 모두 정확합니다.

.testrunconfig (VS2010의 .testsettings)에 배포 할 파일을 추가하면 관련되지 않은 테스트가 격리되어 실행되는 경우에도 모든 파일이 모든 테스트 출력 폴더에 복사됩니다. 하나의 테스트를 실행하면 .testssettings의 배포 섹션에 나열된 모든 테스트 데이터 파일이 테스트 출력 폴더에 복사됩니다.

내 테스트에서 실제 테스트 출력 XML과 비교하기 위해 예상 XML 파일을 테스트 출력 폴더에 복사해야합니다. DeploymentItem 특성을 사용하여 실행중인 테스트와 관련된 XML 파일 만 복사합니다. VS2010에서는 .testsettings 파일에서 배포를 활성화하고 (경로를 추가하지 않음) DeploymentItem에서 TestProject와 관련된 XML 파일 경로를 참조해야했습니다.

도움이 되었기를 바랍니다.


2
내 문제는 여기에 언급 된 상대 경로였습니다. Xml이 테스트가있는 디렉터리에 있어야한다고 생각했지만 프로젝트 루트에 있어야하거나 원래 디렉터리가 시작되어야합니다.
Wes Grant

2

비슷한 문제가 있었지만 Local.testsettings 파일 대신 TraceAndTestImpact.testsettings 파일을 가리키는 것과 관련이 있습니다. Test / Select Active Test Settings 메뉴에서 하나에서 다른 것으로 변경할 수 있습니다.


2

CopyLocal이 작동하지 않는 상황에서 데이터 또는 구성 등에 사용하는 일반적인 방법보다는 dll을 위해 특별히 배포하는 방법을 언급하여 허용 된 답변을 향상시키고 싶습니다.

[DeploymentItem("bin\\release\\iRock.dll")]
[DeploymentItem("bin\\debug\\iRock.dll")]

1

다음은 testsettings 파일을 사용하지 않고 여러 솔루션에 포함 된 테스트 프로젝트에 대해 VS2012에서 작동합니다.

1) 배포하려는 파일과 폴더를 테스트 프로젝트 디렉토리의 폴더에 정렬합니다.

2) 프로젝트 속성에서 빌드 후 단계를 만듭니다.

xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>\*" "$(TargetDir)<Deployment_Folder_Name>"

$(ProjectDir)그리고 $(TargetDir)VS에 의해 해석 될 매크로이며 그 자체로 포함되어야합니다.

<Project_Folder_Name> 1 단계에서 만든 폴더의 이름입니다.

<Deployment_Folder_Name>테스트 파일이 배포 될 폴더의 이름이며 여러 테스트 프로젝트가 동일한 디렉터리에 배포 될 때 고유하도록 이름을 지정해야합니다 (예 : <Project_Name>_TestInputs.

공유 위치의 테스트 파일도 테스트 상호 작용을 제한하기 위해 대상 디렉터리 배포 폴더에 복사해야합니다. $(ProjectDir)매크로에 상대적인 소스 경로를 제공하십시오 . 예를 들면 "$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml".

3) 추가 [DeploymentItem(source, destination)] 배포 파일 (모범 사례)을 사용하는 각 테스트 방법 또는 테스트 클래스 (게 으르거나 서두르는 경우 더 쉬운 방법 속성을 하고 이전에 사용 된 상대 경로 또는 테스트 설정 파일을 프로젝트를 업데이트하는 가장 쉬운 방법 ).

시험 방법에 source의해 생성 된 바와 같이 대상 디렉토리 시험 방법에 대하여 사용되는 파일이나 디렉토리의 경로 xcopydestination이 배치 디렉토리에 대해 생성 될 디렉토리 경로된다. 따라서 테스트는 대상 디렉터리 또는 배포 디렉터리에서 일관되게 실행됩니다. 대상 경로는 파일 참조가없는 소스 경로와 동일해야합니다. 예 : [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]. 는 DeploymentItem해당 파일이나 디렉토리를 사용하는 모든 방법에 포함되어야한다.

클래스에서 sourcedestination모두 대상 디렉토리에 생성 된 폴더의 이름입니다 xcopy. 이렇게하면 클래스의 테스트가 실행될 때 전체 폴더가 배포 디렉터리에 복사됩니다. 예:[DeploymentItem("Example_TestInputs","Example_TestInputs")]

4) 테스트 방법에서 이제 Visual Studio가 그날 저장하기로 결정한 위치에 관계없이 작업 디렉터리에있을 것이라는 확신을 가지고 파일 및 디렉터리에 액세스 할 수 있습니다 (예 : File.Exists(".\Example_TestInputs\C1219TDL-2008.xml").


0

Visual Studio 내에서 빌드 후 이벤트 명령 줄을 사용해보세요 (해당 IDE를 사용하는 경우).


3
그렇습니다.하지만 약간 해킹 인 것 같습니다. 이것은 상당히 일반적인 시나리오 여야하며 적절하게 설정하지 않은 옵션이나 속성이 있기를 바랍니다.
Eric Schoonover

0

Visual Studio 2012에서는 간단한 경우에 DeploymentItem 특성이 필요하지 않습니다. 여기에서 내 대답보기


0
[TestMethod]
[DeploymentItem("ProjectName/Folder/SubFolder/file.xml", "Folder/Subfolder")]
public void YourTestMethod()
{
   // in the method you are testing you should have this:
   var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + "/Folder/Subfolder/file.xml";
}

0

허용되는 답변은 정확하며 대부분의 다른 답변도 그렇습니다. 그러나 수년에 걸쳐 DeploymentAttribtueCopy to Output을 사용하는 Visual Studio 단위 테스트의 배포 시스템이 데이터 파일이 많은 경우 을 . 파일을 원래 위치에 보관하는 것이 더 효과적이라는 것을 알았습니다.

내 다른 답변에 대한 자세한 내용은 여기에 있습니다. https://stackoverflow.com/a/53004985/2989655

도움이 되었기를 바랍니다.

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