2016-12-08 6 views
0

WebAPI2 웹 서비스에서 테스트 케이스로 XUnit을 사용하고 있습니다. 나는App_Data 테스트 유닛의 경로?

AppDomain.CurrentDomain.GetData("DataDirectory").ToString(); 

응용 프로그램 내 테스트를 실행하고 때, 그것은 App_Data의 경로를 반환하지 않습니다 출판 정상적으로 실행될 때이 올바른 경로를 반환 사용하여 App_Data 디렉토리를 얻기 위해 전화를 예배 규칙서. Object reference not set to an instance of an object.

모든 아이디어는 내가이 작업을 수행 할 수있는 방법 :

나는이 예외가? 내 테스트 프로젝트에 App_Data 디렉토리를 추가하려고 시도했지만 동일한 예외가 발생했습니다.

본질적으로 내가 액세스해야하는 암호화 유틸리티 용 XML 구성 파일을 저장합니다. 나는 그걸 뿌리로 옮겨야합니까? 그렇게하면 테스트 유닛에서 어떻게 액세스 할 수 있습니까?

+1

단위 테스트보다 통합 테스트와 비슷합니다 ... 단위 테스트에서는 App_Data에 실제로 아무것도 필요하지 않아야합니까? 그 말로는 테스트 프로젝트를 어떻게 만들지는 모르겠지만 통합 테스트를한다면 아마도 config의 정보를 직접 테스트 앱에 직접 제공 할 것입니다 (예 : 하드 코드/모의). 실제 설정을 읽으려고하는 것. – jleach

+0

@ jdl134679, 앞에서 설명한대로 app.config 및 Web.config의 구성 설정으로 지정했습니다. 포인트를 얻기위한 답으로 게시하십시오. – MB34

+0

Done, thanks ... – jleach

답변

-2

, 그것은의 app.config에서 당겨 수 있습니다.

+0

이 방법이 아닙니다. 단위 테스트는 구성 파일을 가지고 있으면 안된다. –

+0

@AndreiDragotoniu - 나는 동의하지 않는다. (당신의 업보의 하나는 나에게서 나온다.) 나는 OP에 대한 나의 원래 코멘트에서 언급했다.XUnit을 사용하고 있다고해서 단위 테스트 대신 통합 테스트를 작성하지 않는다는 의미는 아닙니다. 통합 테스트는이 구성이 필요한 모든 것을 분류하는 것입니다. – jleach

+0

BTW에서 테스트하려면 App_Data 디렉터리에 저장된 템플릿이 필요합니다. 이는 테스트 유닛에서 해당 디렉토리를 사용하는 것이 허용됩니다. – MB34

2

이렇게하려면 구성 데이터 검색을 추상화하는 것이 좋습니다. 그 구현이 디스크의 App_Data 폴더로 이동 한 것

public interface IConfigurationData 
{ 
    string RetrieveConfigurationData() 
} 

: 당신이 더 뭔가를해야 할 경우

는 하나 이상의 방법으로 인터페이스를 작성합니다. 유닛 테스트에서는 인터페이스를 조롱하고 테스트에 필요한 구성을 검색합니다.

단위 테스트는 파일, 데이터베이스 또는 타사 API와 같은 외부 시스템을 건드리지 않아야합니다. RhinoMocks, Moq 또는 NS substitute와 같은 것을 사용하여 원하는 것을 추상화하고 조롱하십시오.

이유는 가능한 한 빨리 단위 테스트를 실행하기 위해서입니다. 파일과 같은 실제 시스템을 소개하는 순간 더 이상 빠르지 않으며 단위 테스트를 추가 할 때 실행 시간이 계속 올라갑니다. 이상적으로 단위 테스트를 몇 초 내에 실행하기를 원하므로 개발 프로세스를 지연시키지 않고 원하는만큼 여러 번 실행할 수 있습니다. 당신이 (AN app.config로) 테스트 프로젝트로 설정을 복사 한 다음 System.Configuration.ConfigurationManager.AppSettings["SettingName"]을 사용하는 경우 MVC 프로젝트를 사용하여 실행할 때 테스트 프로젝트와 web.config를 사용하여 실행할 때

+0

+1,하지만 당신이 언급 한 속도 문제보다 더 중요한 이유는 유닛 테스트가 매우 미세한 논리를 목표로해야한다는 것입니다.이 논리는 더욱 미묘하지만 더 탄력적입니다. 궁극적으로 longrun에서 더 많이 사용됩니다 (예 : 디스크 또는 기타 위치에서 외부 종속성이 거의 없도록해야합니다). – jleach

+0

BTW에서 테스트하려면 App_Data 디렉터리에 저장된 템플릿이 필요합니다. 이는 테스트 유닛에서 해당 디렉토리를 사용하는 것이 허용됩니다. – MB34