[c#] DeploymentItem 속성 문제

저는 현재 C # .net으로 작성된 “오래된”시스템을 유지하고 있으며, 일부 오래된 기능을 제거하고 일부 리팩토링을 수행하고 있습니다. 감사합니다, 이전 사람이 몇 가지 단위 테스트 (MSTests)를 작성했습니다. 저는 JUnit 테스트에 상당히 익숙하지만 아직 MSTests에 대해서는 많이하지 않았습니다.

테스트 메소드에는 테스트 DeploymentItem중인 비즈니스 로직 메소드에 의해 구문 분석되는 텍스트 파일을 지정 하는 속성이 있으며 두 번째 DeploymentItem는 배치해야하는 TIF 파일 묶음을 포함하는 경로 만 지정되었습니다.

[TestMethod()]
[DeploymentItem(@"files\valid\valid_entries.txt")]
[DeploymentItem(@"files\tif\")]
public void ExistsTifTest()
{
   ...
}

테스트는 이전에 작동했지만 지금은 \ files \ tif 디렉토리에 포함 된 TIF 파일의 이름을 변경해야했습니다. 규칙에 따라 TIF 파일 이름은 ExistsTifTest()메서드 에 의해 확인되는 특정 패턴과 일치해야합니다 . 이제 새로운 요구 사항에 맞게 파일 이름을 변경해야했고 갑자기 TIF 파일이 이전처럼 더 이상 배포되지 않습니다.

누군가가 왜 이런 일이 발생했는지 또는 원인이 무엇인지 힌트를 줄 수 있습니까? 테스트 메서드의 해당 DeploymentItem 속성을 사용하여 \ files \ valid \ 디렉터리의 “valid_entries.txt”옆에 “my2ndTest.txt”라는 새 텍스트 파일을 추가하는 경우에도 동일한 일이 발생합니다. 파일이 배포되지 않습니까?

testrunconfig에서 직접 배포 경로를 정의하여 이미지를 배포했지만 이러한 일이 발생하는 이유 또는 예를 들어 새 파일 “my2ndTest.txt”가 다른 파일이 배포되는 동안 배포되지 않는 이유를 이해하고 싶습니다.



답변

DeploymentItem 약간 엉망입니다.

솔루션의 각 파일에는 VS.NET의 “출력 폴더로 복사”설정이 있습니다. 파일을 출력 폴더로 가져 오려면 “항상 복사”(또는 유사) 여야합니다.

새 파일에 대해이 세트가 있는지 확인하십시오. 이 설정이 없으면 파일이 출력 폴더로 복사되지 않고 출력 폴더에서 MSTest가 수행하는 폴더로 배포 할 수 없습니다.

개인적으로 단위 테스트에 필요한 파일이있는 경우 해당 파일을 어셈블리에 리소스로 포함하고 테스트 중에 어셈블리 자체를 “압축 해제”하는 것이 작업을 수행하는 더 예측 가능한 방법이라는 것을 알았습니다. YMMV.

참고 : 이 의견은 VS2010에 대한 저의 경험을 기반으로합니다. 내 대답에 대한 의견은 이것이 VS2012에 문제가 없음을 시사합니다. 나는 여전히 임베디드 리소스를 사용하는 것이 “마법”을 덜 수반하고, 내 단위 테스트의 “정렬”단계를 훨씬 더 명확하게 만든다는 의견을지지합니다.


답변

VS2010에서 내 Local.testsettings의 “배포 활성화”가 선택되지 않았고 DeploymentItem 속성이 작동하지 않았습니다. 나는 그것을 확인했고 모든 것이 잘 작동했습니다. 이게 도움이 되길 바란다!


답변

나는 또한 비슷한 문제에 직면했지만 이것에 대한 쉬운 3 단계 해결책을 찾았습니다.

폴더 구조가 다음과 같다고 가정합니다.

SolutionFolder\
TestProjectFolder\
SubFolder\

  1. “Solutions Items / Local.testsettings”> “배포”로 이동하여 “배포 활성화”를 선택합니다.
  2. VS2010을 사용하는 경우 배포하려는 파일의 “출력 폴더로 복사”속성이 “항상 복사”또는 “최신 인 경우 복사”로 설정되어 있는지 확인하십시오.
  3. 다음 중 하나를 사용하여 TestMethod를 지정합니다.
    • [DeploymentItem(@"TestProjectFolder\SubFolder")]모든 컨텐츠를 <SubFolder>Test Run 디렉토리 에 배포
    • [DeploymentItem(@"TestProjectFolder\SubFolder", "TargetFolder")] 의 모든 콘텐츠를 배포하는 방법 <SubFolder><TargetFolder>테스트 실행 디렉토리에

MSTest에 대한 마지막 참고 사항 (적어도 VS2010의 경우) :

당신이 원하는 경우는 <TargetFolder>와 같은 이름을 가지고 <SubFolder>사용 [DeploymentItem(@"SubFolder", @"SubFolder")]MSTEST 주자 바보 가장자리 케이스 안타 자동으로 실패합니다. 당신이 접두사를해야하는 이유입니다 <SubFolder><TestProjectFolder>않도록 :[DeploymentItem(@"TestProjectFolder\SubFolder", @"SubFolder")]


답변

다른 사람을 돕기 위해 : 여기에서 모든 제안을 시도했지만 여전히 배포 항목이 복사되지 않았습니다.

내가해야 할 일은 ( 여기에 제안 된대로 ) DeploymentItem 속성에 두 번째 매개 변수를 추가하는 것입니다.

[DeploymentItem(@"UnitTestData\TestData.xml", "UnitTestData")]


답변

.testrunconfig 파일로 이동하여 배포에서 “배포 활성화”를 선택 취소하면 테스트가 정상적인 위치에서 실행되고 모든 것이 단위 테스트 외부에서 앱을 실행할 때처럼 작동합니다.


답변

이것은 아마도 정확한 문제와 관련이 없지만 [DeploymentItem] 속성으로 찾은 몇 가지 팁입니다.

  1. 출력 디렉토리에 복사는 항상 복사로 설정되어야합니다.

[TestInitialize] 속성과 함께 사용하면 작동 하지 않습니다.

[TestInitialize]
[DeploymentItem("test.xlsx")]
public void Setup()
{

[TestMethod]에 있어야합니다. 예 :

    [TestInitialize]
    public void Setup()
    {
        string spreadsheet = Path.GetFullPath("test.xlsx");
        Assert.IsTrue(File.Exists(spreadsheet));
        ...
    }

    [TestMethod]
    [DeploymentItem("test.xlsx")]
    public void ExcelQuestionParser_Reads_XmlElements()
    {
        ...
    }


답변

여기에 나열된 다른 제안을 모두 시도한 후에도 여전히 무슨 일이 일어나고 있는지 파악할 수 없었습니다. 마지막으로 테스트 / 테스트 설정 메뉴에서 선택된 설정 파일이 없다는 것을 발견했습니다. 이는 배포가 활성화되지 않았 음을 의미합니다. 테스트 / 테스트 설정 / 테스트 설정 파일 선택 메뉴 항목을 클릭하고 Local.TestSettings 파일을 선택한 다음 모든 것이 작동했습니다.