2010-11-29 5 views
1

내 단위 테스트 중 하나가 실패하는 이유로 완전히 기절했습니다. 올바른 연결 문자열이 반환되는지 여부를 확인하는 간단한 테스트입니다.ConfigurationManager ConnectionString throwing 오류 및 null 반환

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <compilation defaultLanguage="c#" debug="true" /> 
    </system.web> 
    <connectionStrings> 
     <add name="DbConnectionString" connectionString="Test_HighOnCoding_Db" /> 
    </connectionStrings> 
</configuration> 

을 그리고 여기에 항상 null 예외가 발생 나의 간단한 단위 테스트입니다 : 내의 App.config은 다음과 같습니다

[TestFixture] 
public class when_retrieving_database_name_from_config 
{ 
    [Test] 
    public void should_get_the_correct_database_name() 
    { 
     var dbName = ConfigurationManager.ConnectionStrings["DbConnectionString"].ConnectionString; 

     // dbName is always null 

     Assert.AreEqual("Test_HighOnCoding_Db",dbName); 
    } 
} 

답변

5

내 원래의 대답은 아래에 코멘트에 따라 적용되지 않습니다.

나는 다음을 점검 할 것을 제안 할 것이다. app.config 파일이 프로그램과 함께 디렉토리로 옮겨지고, 프로그램과 동일한 이름으로 바뀌고 .config가 추가 되었습니까?

그래서, program.exe는 설정 파일로 program.exe.config을 가지고 '당신이 여기에 웹 응용 프로그램을 마치

; 그렇다면 구성 파일은 app.config이 아닌 web.config이어야합니다. 그런 다음 System.Web.Configuration 네임 스페이스의 WebConfigurationManager을 사용해야합니다.

+0

system.web 섹션을 제거했습니다. 이 프로젝트는 단위 테스트를위한 클래스 라이브러리 프로젝트입니다. 그리고 App.config 파일을 추가했습니다. VS 대신 MonoDevelop를 사용하고 있습니다. – azamsharp

+0

그래, 내 원래의 대답은 신경 쓰지 마라. –

+0

bin 폴더에 복사되지 않으며 이름이 변경되지 않습니다. App.config 파일 (App의 대문자 A)에 대한 Build 동작은 nothing으로 설정됩니다. – azamsharp

0

만약 귀하의 testdll이 MyTests.dll 인 경우 귀하의 app.config는 그 서브 - 프로젯이 MyTests.dll.config가 될 것입니다. 불행하게도 NUNIT합니다 (없이 ".DLL.") "MyTests.config"를 원하는

는 "MyTests"

  • 개방 NUNIT - GUI
  • 에 대한 NUNIT 프로젝트를 만들이 문제

    • 를 해결하기 위해
    • bin 폴더에 새 nunit 프로젝트 "MyTests.nunit"을 만듭니다.
    • MyTests.dll을 MyTests.nunit에 추가하십시오.
    • nunit 프로젝트를 저장하십시오.
    • 종료 NUNIT 프로젝트 소스 솔루션
      • 복사 "MyTests.nunit"에
    • 추가 "MyTests.nunit". 설정은 항상 =
    • buildaction = 없음 디렉터리를 Ouptut하는
    • 복사됩니다 슈어을
  • 프로젝트 설정/빌드 이벤트 아래에서 configFile "MyTests.nunit"에 대한 "MyTests.config"
    • 를 만들/PostBildEventCommandLine
을의 .config
  • 복사 $ (PROJECTDIR) \의 app.config $ (TARGETDIR) \의 $ (targetName을)를 추가3210

    이제 "MyTests.nunit"을 열어 unittest를 실행할 수 있습니다

  • 1

    간단한 수정 - 테스트 프로젝트에 app.config를 넣으십시오.

    테스트에서 실행 중이므로 앱입니다.config는 실제 프로젝트 프로젝트가 아닌 테스트 프로젝트에 있어야합니다.

    테스트를 실행할 때 실행중인 응용 프로그램의 컨텍스트는 테스트 어셈블리에서 가져온 것이므로 ConfigurationManager.ConnectionStrings는 YourTestAssembly.dll.config (응용 프로그램에서 자동 생성 됨)에 대한 테스트 프로젝트 bin 폴더에서만 찾고 있습니다. 테스트 프로젝트 폴더에서 구성).

    관련 문제