2009-09-20 3 views
2

프로젝트에서 단위 테스트를 실행하는 데 필요한 파일이 필요한 몇 가지 단위 테스트가 있습니다. 이 파일들은 단지 이미지 일뿐입니다. C# 내에서 어떤 종류의 함수를 사용하여 이미지 파일을 가져와야합니다. 아래처럼 전체 경로를 붙여 넣는 것 이외에는.C# .NET MVC에서 개발중인 응용 프로그램의 상대 루트 경로를 얻는 방법은 무엇입니까?

string filePath = @"C:\Users\user1\Documents\Visual Studio 2008\Projects\app1\app1.Tests\Fakes\test_files\test-image.jpg"; 

내가 좋아하는 일을하는 것을 선호합니다

string filePath = app.path + "\Fakes\test_files\test-images.jpg" 

내가 어떻게 할 수 있습니까?

감사합니다.

+0

귀하의 설명에 따라 답변을 업데이트했습니다. 아래 마지막 부분을 참조하십시오. – bobbymcr

답변

2

질문이 런타임에 이러한 파일을 가져 오는 경우 ...이 작업을 원하지 않습니다. 이러한 파일을 빌드 프로세스의 일부로 어떻게 든 배치해야 컴파일 된 바이너리 및 기타 내용에 비해 예측 가능한 위치에있게됩니다.

Visual Studio에서 모든 프로젝트 파일의 출력 디렉터리 속성에 복사하여 파일을 출력 폴더에 배치 할 수 있습니다.


당신이 당신의 단위 테스트의 일환으로 이러한 파일을 얻으려면처럼 소리 때문에

Copy to Output Directory screenshot http://i33.tinypic.com/aky4j7.png

, 당신은 MSTEST 대신 [DeploymentItem] 속성 같은 것을 사용할 것입니다. 그러면 런타임에 파일이 테스트 디렉토리에 저장됩니다. Test Deployment on MSDN에 대해 읽어보십시오.

+0

처음으로 정확하게 설명하지 않았기 때문에 질문을 편집했습니다. – Geo

+0

@bobbymcr - 당신은 다음 세 단계를 모두 수행해야한다고 생각합니다. 1) 빌드 동작을 내용으로 표시합니다. 2) 출력 디렉터리에 복사를 항상 복사/최신으로 복사를 설정합니다. 3) 테스트에서 DeploymentItemAttribute를 설정합니다. –

0

분명히 밝히면, 이것은 단위 테스트가 아닙니다. 단위 테스트는 환경에 의존해서는 안됩니다. 데이터베이스, 파일 시스템 등에있는 어떤 것도 사용되어서는 안됩니다. 단위 테스트는 단일 코드 단위를 테스트하는 데에만 사용해야합니다. 누군가가 소스를 가져 와서 단위 테스트를 실행하면 (소스를 가져온 후에 수행해야 할 첫 번째 작업) 실행되지 않는다는 사실 때문입니다. 테스트가 통과되기 전에 환경을 설정해야합니다. 이를 통합 테스트라고합니다.

변수가 하나의 클래스에 있으면 변수를 설정하거나 app.config가 여러 클래스에 걸쳐 있으면 변수를 설정할 수 있습니다. 거기에 기본 경로로 경로를 추가하고이를 "app.path"로 사용할 수 있습니다.

+0

95 %의 시간에 동의합니다.그러나 특수한 것을 테스트하고 예를 들어 이미지가 필요할 때가 있습니다. 이러한 경우, "레거시 코드로 효과적으로 작업하기"에서 발견되는 단위 테스트의 정의를 참조하고 싶습니다. 단위 테스트는 FAST를 실행하는 테스트 여야합니다. 따라서 이미지 (테스팅 비전 라이브러리)의 경우 작업에 가장 적합한 작은 이미지를 찾습니다. 2 밀리 초보다 길면 테스트를 폐기하지만 매우 빠르면 단위 테스트로 계산합니다. –

0

나는 원래 질문에 대답하지 않기 때문에 위의 최고 등급 답변을 싫어합니다.

MVC 다양한 것을 포함하여 ASP.NET 웹 응용 프로그램의 루트 경로를 얻으려는 정당한 이유가 있습니다. 예를 들어, 나중에 XSL 변환이 동적으로 제공되는 XML 문서 (Xpath 문서 기능 사용)를 해결하는 데 사용하는 'URI 패턴'을 전달할 수 있도록해야합니다.

전체 URI의 경우 컨트롤러/페이지에서 this.Request.Url.AbsoluteUri에 대한 문자열 작업을 수행 할 수 있습니다.

현재 경로의 경우 this.Request.Path를 사용하고 응용 프로그램의 루트 경로의 경우 this.Request.ApplicationPAth를 사용하십시오.

관련 문제