2009-08-23 2 views
6

나는 다음과 같은 설정이 있습니다액세스의 app.config 설정

  • ASP.net 3.5 웹 사이트 프로젝트 비즈니스 로직
  • C# 클래스 라이브러리와
  • C# 클래스 라이브러리 단위 테스트 용

DB 액세스는 모두 비즈니스 로직 라이브러리에서 수행합니다. System.Configuration.ConfigurationManager.ConnectionStrings에 액세스하여 웹 사이트의 web.config 파일에서 연결 문자열을 가져옵니다. 라이브러리가 호출자의 구성을 찾으면 웹 사이트에서 라이브러리를 호출 할 때 제대로 작동합니다.

유닛 테스트 클래스 라이브러리를 통해 비즈니스 로직을 테스트 할 수 있기를 원합니다. 테스트 클래스 라이브러리의 루트에 App.config 파일을 넣었습니다. 필자가 읽은 바에 따르면 테스트 라이브러리가 비즈니스 논리 라이브러리의 일부인 데이터 액세스 프로 시저를 호출하면 테스트 라이브러리의 App.config 파일에있는 연결 설정에 액세스하고 사용해야합니다. 그러나 단위 테스트를 실행하려고하면 테스트 라이브러리의 App.config 파일 (및/또는 해당 내용)이 성공적으로 액세스되지 않음을 나타내는 오류가 다시 발생합니다.

(비즈니스 로직 라이브러리 내에서)를 설정 속성의 내 검색은 다음과 같습니다이이 웹 사이트 프로젝트에서 호출

public SqlConnection MainConnection { 
    get { 
    string conn = ""; 
    try { 
     conn = System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ConnectionString; 
    } catch { 
     // might be calling from test project. Need to reference app settings 
     conn = System.Configuration.ConfigurationManager.AppSettings["connString"]; 
    } 
    return new SqlConnection(conn); 
    } 
} 

, 그것은 작동합니다. 단위 테스트 내에서, conn 변수는 절대로 아무것도 설정되지 않습니다 (System.Configuration.ConfigurationSettings.AppSettings를 시도하고 대신 동일한 결과를 사용함). NUnit GUI에서 호출 할 때 비즈니스 로직 클래스 라이브러리가 단위 테스트 클래스 라이브러리 설정을 성공적으로 검색하도록하려면 어떻게해야합니까?

+1

NUnit은 Visual Studio의 테스트 장치 작업에 대해 설명한 시나리오가 있으므로 질문에 포함해야하는 중요한 정보입니다. 테스트 하니스는 테스트 프로젝트의 app.conig에서 구성을 읽습니다. –

+0

NUnit GUI에서 테스트를 호출한다는 질문에 그냥 추가되었습니다. –

+0

설명대로 작동해야합니다. 테스트 프로젝트의 app.config에 관련된 모든 설정을 가지고 있습니까? AppSettings와 ApplicationSettings를 혼동시킬 수 있습니까? 두 config 파일의 관련 섹션을 게시 할 수 있습니까? – Manu

답변

7

난 그냥 솔루션 here을 발견했다. App.config는 이제 NUnit GUI를 통해 테스트를 실행할 때 제대로 사용됩니다.

분명히 NUnit GUI를 사용하고 프로젝트> 어셈블리 추가를 통해 어셈블리를 추가하는 경우에는 app.config에 액세스하지 않습니다. 그러나 Windows 탐색기에서 NUnit GUI로 dll을 드래그하여 NUnit 프로젝트에 어셈블리를 추가하면 app.config에 액세스합니다.

또는 GUI를 통해 어셈블리를 추가 한 다음 NUnit GUI> 프로젝트> 편집으로 이동하고 구성 파일 이름을 구성 파일의 이름으로 설정할 수 있습니다 (VS는 이것을 name.of.your로 설정 함). .dll.config) 프로젝트베이스를 프로젝트의 \ bin \ Debug 디렉토리로 설정하십시오. (어셈블리에서 드래그 할 때 수동으로 추가 할 때 추가 작업이 필요합니다.)

+1

링크가 끊어졌습니다. – Doomsknight

+1

활성 링크 : http://web.archive.org/web/20100619012049/http://www.safnet.com/writing/tech/archives/2007/12/nunit_ignores_a.html –

+0

죄송합니다.하지만이 작업을 시도했습니다. 작동하지 않는, 나는 콘솔 응용 프로그램을 가지고 있고 난 exe 파일을 DLL이 없습니다 – Chlebta

0

해보십시오 WebConfigurationManager.OpenWebConfiguration() 메소드

Configuration config = WebConfigurationManager.OpenWebConfiguration(@"x:\path\web.config"); 
      KeyValueConfigurationCollection appSettings = config.AppSettings.Settings; 
      string connString = appSettings["connString"].Value; 
+1

방금 ​​시도했습니다. WebConfigurationManager.OpenWebConfiguration에는 가상 경로가 필요하며 사이트 내에서이를 호출하지 않기 때문에 가상 경로를 제공 할 수 없습니다. –

6

구성 설정을 찾을 책임이있는 대신 비즈니스 논리 계층에 이 삽입되어이 삽입 된 디자인을 변경하는 것이 좋습니다.

웹 앱은 Web.config 파일에서 읽는 설정을 주입 할 수 있지만 단위 테스트에서는 다른 설정 (예 : 연결 문자열을 테스트 데이터베이스 등에 연결)

+0

내 상황은 내가 꽤 많은 일이 끝나면 프로젝트에 단위 테스트를 도입한다는 것이다. 모든 코드를 App_Code에서 자체 독립 실행 형 라이브러리로 이동하여 유닛 테스트를 수행 할 수있게되었습니다. 그러나이 시점에서 의존성 주입은 범위를 벗어납니다. –

3

app.config에서 name.of.your.dll.config으로 이름을 바꿉니다. 그것은 나를 위해 작동합니다.