2013-10-14 17 views
2

단위 테스트에 새로운 점이 VS2010 & C#입니다. 테스트해야하는 파일을로드하려고합니다. 접근 방식과 같은 maven이 있습니까? 또는 가장 좋은 방법은 무엇입니까?단위 테스트 중 리소스 활용

테스트 리소스를 어떻게 저장하고로드해야합니까?

내 접근 방식은

+MyTestProject 
+-Properties 
+-.... 
+-Resources 
+- MyFile.xml 
+- OtherFile.xls 
+-... 
+... 

같은 테스트 프로젝트에서 새 폴더를 만들 것

// 편집 :

내가 만든 콘텐츠에 대한 내 코드를 테스트하기 위해 노력하고있어, 그래서 내가 해요 이 콘텐츠를 내 단위 테스트 프레임 워크 [ClassInitialize()]에 그대로로드하고 각 단위 테스트 [TestInitialize()]에 전달할 가능성이 있습니다. 그래서 정말 디스크에 파일을로드하고 싶습니다. 조롱도 좋은 힌트이지만,이 경우 나는 다른 방법을 선호합니다.

+1

아마도 xml 파일을 사용하는 대신 xml 개체를 만들 수 있습니다. 그러나 더 자세한 정보가 없으면 접근 방법은 괜찮습니다. – WhileTrueSleep

+0

_ "생성 된 콘텐츠에 대해 내 코드를 테스트하려고합니다."_ -이 콘텐츠 _ 테스트 할 수있는 메모리 표현. 파일을 읽는 대신 코드에서 다시 만들 수 있습니까? – CodeCaster

+0

@CodeCaster이 콘텐츠를 생성하는 것은 내가 아닌 다른 응용 프로그램에서 만들어졌으며 직접 액세스 할 수 없습니다. 결과 만. – MemLeak

답변

1

몇 가지 접근 방법을 사용할 수 있습니다. 하나는 파일을 임베디드 리소스로 배포하고 조명기/테스트 클래스 초기화 메소드에서 테스트 런타임에 파일을 추출하는 것입니다. 이 방법은 매우 신뢰할 만합니다 (즉, 테스트 어셈블리가 어디에서 실행되는지는 중요하지 않지만). 약간 더 복잡합니다 (파일을 포함 된 리소스로 표시해야하는 경우 파일 기반 어셈블리를 포함 할 때 사용되는 명명 규칙에 대해 알아야합니다. 기반 리소스를 어셈블리로 가져오고 Assembly.GetManifestResourceStream()을 숙지해야합니다.

"loose files"(즉, 포함되지 않음)를 사용할 수도 있습니다. 이 방법에서는 파일을 "Copy Always"또는 "Copy if Newer"로 표시하기 만하면 파일이 테스트 어셈블리의 빌드 출력 디렉토리에 복사됩니다. NUnit을 사용하고 있다면 거기에서 멈출 수 있습니다. 당신이 (비주얼 스튜디오와 함께 제공 무엇을) MSTEST를 사용하는 경우, 당신은 당신의 테스트 클래스 나 메소드에 [DeploymentItem] 속성을 추가해야합니다 : 위의 모두에서

[DeploymentItem("MyFile.xml"[, "someoptionalsubfolder"])] 
    public void MyTest() 
    { 
     ... 
    } 

, 나는 당신이하는 것이 좋습니다 리소스를 추적 할 수 있도록 폴더 구조/명명 규칙을 채택하십시오. 아래처럼 뭔가가 잘 작동했습니다. 그것은 ASP.NET MVC가 사용하는 폴더 구조와 꽤 잘 작동합니다. 이 접근법에서는 어셈블리 또는 테스트 클래스 수준에서 테스트 집합에 대해 일정한 "공유"리소스를 가질 수 있지만 각 테스트 집합 또는 각 테스트마다 자체 리소스 버전을 가질 수 있습니다 (예를 들면, 테스트 "잘못된 데이터"응답 또는 테스트 에지의 시나리오)을 위해 :이 방법을 따른다면 그런데

+-Resources 
    +-Shared 
     - SomeGlobalResource.xml 
    +-TestClass1 
     +-Shared 
     - MockData.xml 
     +-TestCase1 
     - SpecialVersionofMockData.xml 
     +-TestCase2 
     - MockDataMissingRequiredInformation.xml 
     +-TestCase3 
     - EtCetera.xml 
     +-... 
    +-TestClass2 
     +-Shared 
     +-TestCase1 
     +-TestCase2 
     +-... 
    +-TestClass3 
    ... 

, 이것은 크게는 MSTEST에서 DeploymentItem 속성을 사용하는 방법을 단순화합니다.대신 자신을 미치게 각각의 리소스 파일에 대한 속성을 유지, 당신은 단순히 클래스에서 하나의 지시어를 배치 할 수 있습니다 복사하는 전체 리소스 폴더 트리 :

[DeploymentItem("Resources\\", "Resources")] 
    [TestClass] 
    public class MyTestClass() 
    { 
     ... 
    } 

편집 : 나는 당신이 아직도 지적한다 테스트 내용에 대한 경로를 관리하는 데 필요합니다. NUnit이나 MSTest는 현재 실행중인 테스트를 기반으로 경로를 자동 생성하는 도구를 제공하지 않습니다. 즉, 테스트 코드를 복사하여 붙여 넣을 때 정확한 경로를 유지하는 것에 대해 경계해야합니다.

2

UnitTesting 프로젝트에서 사용하려는 리소스에는 어떤 것이 있습니까? 단위 테스트에서 의존성을 사용하려고한다면 단위 테스트가 아닙니다.

단위 테스트는 단일 코드 단위 만 테스트하는 경향이 있습니다. 의존성이 있다면 모의 (Mock) 프레임 워크를 사용하여 종속 된 리소스를 가짜로 만들 수 있습니다.

통합 테스트를 찾고 있다면 다른 경우입니다. 이 경우 파일 복사본을 사용하는 대신 프로덕션 지점에서 "파일 링크"를 사용해야합니다.

+0

고맙습니다. - 제 질문을 편집했습니다. 나는 그것을 연결할 수 없으며, 나는 각 입력 파일에 대한 각 릴리즈의 코드를 강제로 적용 할 것이다. – MemLeak

+0

파일이 생성되면 Class \ Test Initialized에있는 파일을 생성하고 bin 또는 output 폴더에서 생성 된 파일을 찾는 작업을 호출합니다. 파일이 생성되지 않으면 테스트가 실패합니다. 이것은 종속성을 가장 낮게 유지하고 더 많은 테스트 범위를 제공합니다. 이 케이스가 귀하의 케이스인지 확실하지 않습니다. – vendettamit

관련 문제