2012-07-06 2 views
2

AppHarbor 설명서에는 구성 변환이 웹 사이트 및 백그라운드 작업자 구성 파일에 모두 적용됩니다. 그러나 테스트 환경에 app.config 변형이 필요한 실행 불가능하고 배포 불가능한 통합 테스트 프로젝트가 있습니다.AppHarbor 테스트 프로젝트에 대한 구성 변환을 적용 할 수 있습니까?

지금까지 나는이 다음과 같은 파일 구조에 어떤 성공을 거두었 적이 없다, 나는 AppHarbor는 테스트 실행 빌드 단계에서 DLL 프로젝트에 구성 변환을 지원하지 않습니다 같은데요 :

Specs.proj 
+ 
+-- Specs.dll.config 
    + 
    +-- Specs.dll.Debug.config 
    + 
    +-- Specs.dll.Test.config 

이것이 가능해야하는지 아는 사람이 있습니까?

+0

문서를 확인하셨습니까? http://support.appharbor.com/kb/getting-started/managing-environments – jrummell

+1

@jrummell 예, 있습니다. 문서는 릴리스 환경의 변환만을 언급하고 웹 및 백그라운드 작업자 (.exe) 프로젝트는 언급하지만 .dll 프로젝트는 언급하지 않습니다. – Scott

+0

오른쪽, 변환 dll 구성이 의미가 없습니다. 내 대답을 보라. – jrummell

답변

2

라이브러리 프로젝트 (dll)의 변환 구성은 의미가 없습니다. 응용 프로그램은 웹 응용 프로그램의 exe 또는 web.config의 app.config를 사용합니다.

dll 설정에서 관련 구성 설정을 exe/web config 변환으로 복사해야합니다. 종속 관계로 주입 :

이 이후

이 테스트를 실행하기위한 업데이트, 나는 다른 접근 방식을 권하고 싶습니다. 이 주제에 대한 훌륭한 게시물은 Configuration Settings Are A Dependency That Should Be Injected을 참조하십시오.

왜 그것이 당신의 단위 테스트 프로젝트에 구성 설정을 추가 할 수있는 해킹 :

여기에 내 생각을 변경 의견을 고집 발췌? 음, web.config 및 app.config는 다른 모든 파일과 마찬가지로 파일입니다. 따라서 클래스 내의 구성 설정을 참조한다는 것은 해당 파일 시스템에 대한 직접적인 종속성이 클래스 임을 의미합니다. 당신은 그렇게 느끼지 않을 것입니다 당신의 단위 테스트가 내 파일을 열어 본다면 내 문서 또는 인터넷에서 웹 페이지를 다운로드 한 이유는 무엇입니까 사람들은 그것이 web.config에 액세스 할 수 있다고 생각합니까?

+0

테스트 빌드 단계에서 웹 프로젝트 또는 백그라운드 작업자 응용 프로그램을 실행하지 않습니다. AppHarbor 빌드 시스템은 테스트 프로젝트 (DLL)에있는 구성 파일을 사용하는 테스트 (테스트 러너 사용)를 실행 중입니다. 적어도 MsBuild CLI와 Visual Studio 모두에서 로컬로 작동합니다. – Scott

+1

이제 알겠습니다. 나는 CI 서버로 그 길을 내려다 보았고, 나는 DI 프레임 워크로 나의 설정을 주입했다. – jrummell

+2

또한 테스트 변환이 아닌 배포하기 전에 현재 릴리스 변환 만 적용하고 있습니다. – friism

0

통합 테스트를 위해 앱 항구 설정 값을 사용하고 싶었습니다. 나는 앱 항구가 올바른 설정을 주입하도록 작동시키지 못했지만, 가까워졌다.

내 웹 프로젝트에 내 통합 테스트가 있으므로 app.config를 내 웹 프로젝트에 추가했습니다. 그 코드는 환경 값을 항구 응용 프로그램을 실행할 때

<appSettings> 
    <add key="Environment" value="localconfig"/> 

내가 눈치 시험했다 :

나는의 app.config하는 환경의 응용 프로그램 설정을 추가 27,017. xxxxxxxxx는 내가 통합 테스트시에 사용할 값입니다

private static string GetMongoDbConnectionString() 
{ 
    string con = ConfigurationManager.AppSettings.Get("MONGOHQ_URL") ?? 
       ConfigurationManager.AppSettings.Get("MONGOLAB_URI"); 
    string env = ConfigurationManager.AppSettings.Get("Environment"); 
    if (env.StartsWith("Test", StringComparison.OrdinalIgnoreCase)) 
    { 
     con = "mongodb://xxxxxxxxx"; 
    } 
    return con; 
} 

:

는이 코드를 썼다.

관련 문제