2011-03-13 1 views
4

구성 파일에 의존하는 단위 테스트를 작성했습니다. 이 file.config은 내 테스트 프로젝트의 bin\Debug 디렉토리에 배포됩니다. 그러나 실제로 테스트가 수행되는 출력 테스트 결과 디렉토리에 복사되지는 않습니다.단위 테스트 중에 테스트 결과 디렉토리에 복사되는 구성 파일을 만드는 방법은 무엇입니까?

내가 검색 한 다음을 발견했다 :
TFS UnitTesting not deploying local copy assembly to test dir when on build server
Test project and config file

첫 번째 링크가 내 테스트 프로젝트의 bin\Debug 디렉토리에 내 구성 파일을 배포하는 방법을 찾을 수있었습니다.

두 번째 테스트는 실용적인 해결책을 제시합니다. 테스트 할 클래스를 추가해야하는 것은 아니지만 내 필요에 조금 지나치게 유용하다는 것을 알았습니다. 따라서 간단한 접근 방식을 선호합니다. 이 설정 파일을 테스트 결과 디렉토리에 자동으로 복사하십시오.

편집 # 1

내가 사용 :

  1. Microsoft 엔터프라이즈 라이브러리 4.1의 명명 된 연결과 함께; 와 함께
  2. Microsoft Visual Studio 2008; 및
  3. Microsoft 단위 테스트 프레임 워크.

내 설정 파일은 다음과 같습니다

<configuration> 
    <configSections> 
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    </configSections> 
    <dataConfiguration defaultDatabase="Tests" /> 
    <connectionStrings> 
    <add name="Tests" connectionString="Database=Tests;Server=(local)\SQLEXPRESS;Integrated Security=SSPI" 
     providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</configuration> 

및 이름 : Tests.config.

이제 기본 소스 이름이 들어있는 DefaultSource 매개 변수가 포함 된 프로젝트 설정이 있습니다. 즉, 연결 및 데이터베이스 개체를 만들 수 있습니다. 이 설정의 값은 Tests입니다.

내가 새로운 연결을 만들 때

그래서, 나는 단순히과 같이 그것을 할 : 이제

public static IDbConnection CreateConnection(string source) { 
    return new DatabaseProviderFactory(new FileConfigurationSource(
      string.Format("{0}\{1}.config", AppDomain.CurrentDomain.BaseDirectory, source) 
     ).CreateDefault().CreateConnection(); 
} 

, 그것 때문에 반환되는 AppDomain.CurrentDomain.Basedirectory 가치, 단위 테스트 동안 제대로 작동하지 않는이있다 . 이 속성은 어셈블리 빌드 디렉토리 bin\Debug을 반환하지 않고 테스트가 실제로 실행되는 TestResults[auto-generated-test-results-directory]을 반환합니다.

그래서, 내 테스트에서 내가 할 때

[TestMethod()] 
public void Connection_InitializationWithSourceName() { 
    using connection as IConnection = ConnectionProviderFactory.CreateConnection(DefaultSource) { 
     // Asserts here... 
    } 
} 

DefaultSource 속성은 값이 Tests 내 기본 소스 설정 매개 변수를 반환 곳. 따라서 FileConfigurationSource 개체 클래스는 앞서 설명한 것처럼 테스트가 실제로 실행되는 테스트 결과 디렉터리에서 Tests.config이라는 파일을 검색합니다.

어떻게해야할까요?

감사합니다.=)

답변

5

어디서나 파일을 복사하는 프로젝트에 포스트 빌드 이벤트를 추가하지 않는 이유는 무엇입니까?

+0

+1 이것은 훌륭한 아이디어입니다. 그리고 테스트를 실행할 때마다 자동으로 생성 된 테스트 결과 디렉토리 이름 즉, C : \ MyProject.Tests \ TestResults \ [auto-generated-test-result-directory]를 계획 할 수만 있다면 그렇게하고 싶습니다. ] \ Out'. 이것은 나 혼란스럽고 post-build를 복사 할 수 없게하는'[자동 생성 된]'부분입니다. –

+0

적어도 두 가지 옵션이 있습니다.이'[자동 생성 된]'이 어떻게 작동하는지 직접 작성하고 로직을 다시 빌드하십시오. 또는'C : \ MyProject.Tests \ TestResults \ * \ Out'과 같은 경로를 가진 서브 디렉토리에 설정 파일을 복사하십시오. 즉, 복사 작업을 위해 작은 프로그램이나 스크립트를 작성해야합니다 (일반적으로 이러한 종류의 작업에는 VBScript를 선택하지만 원하는 도구는 선택할 수 있습니다). –

4

필요한 모든 테스트에 [DeploymentItem] 특성을 추가 할 수 있으며 필요한 파일을 out 폴더에 배포합니다.

[DeploymentItem("resources/my-file.ini")] 
[TestMethod()] 
public void Connection_InitializationWithSourceName() { 

또는 해당 클래스의 모든 테스트를 위해 필요하면 당신은 클래스에 넣어 수 있습니다 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v=vs.80).aspx

그것은 다음과 같이 사용할 수 있습니다.

+0

다시 테스트 할 때이 옵션을 사용하여 동작과 그 결과를 볼 수 있습니다. 답장을 보내 주셔서 감사합니다 (+1)! =) –

+0

이것은 훌륭하게 작동하며 설정하기가 쉽기 때문에 * postbuild 이벤트 *는 더 쉬울 수 없습니다. postbuild 이벤트를 시도하지 않았지만 빌드 전문가가 아니라면 변수 등을 먼저 알아 내야 할 것입니다. –

관련 문제