2009-10-08 7 views
2

기본 사용자 데이터베이스를 사용하는 asp.net mvc 응용 프로그램이 있습니다. 모두 잘 작동하지만 몇 가지 테스트를 만들고 싶습니다. 나는 즉시 예외테스트 중에 DB 연결에 실패했습니다.

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid. 

그러나 연결 문자열 (적어도 MVC 프로젝트의 web.config에서) 완벽하게 작동하고 우연히 발견, 테스트 프로젝트가 있습니다. 엔티티 DB 액세스 논리 생성자에 의해 예외가 throw됩니다.

public ASPNETDBEntities() : 
      base("name=ASPNETDBEntities", "ASPNETDBEntities") 
{ 
    this.OnContextCreated(); 
} 

아이디어가 있습니까? 미리 감사드립니다.

답변

2

단위 테스트를 실행할 때 Entity Framework에서 찾을 수 있도록 테스트 프로젝트의 App.config 파일에 연결 문자열을 설정해야합니다.

그러나 단위 테스트를 수행하는 경우 db에 전혀 액세스하지 않으려는 경우가 아니라 테스트를 위해 더미 객체를 모의 해보는 것이 좋습니다. (코드에서 그대로하기가 어렵다면 코드의 리팩토링이 필요합니다 ...)

세 번째 가능한 시나리오는 통합 테스트를 수행 중이므로 액세스하려는 것입니다 실제 db를 테스트 할 때 - 그러나 실제 db 일 필요는 없습니다. 동일한 데이터베이스 스키마를 가진 모든 db 일 수 있습니다. 당신이 테스트를 수행 할 수있는 (그리고 테스트 프로젝트의 App.config 파일에 connectionstring을 넣는) 더미 레코드를 가진 dummy db를 설정하는 것이 좋습니다. "진짜"db 않습니다.

+0

두 번째 단락의 시나리오에서 문맥이 실제로 조롱되었지만 모의 객체의 기본 객체 컨텍스트 속성을 활용하려면 어떻게해야합니까? app.config에 모의 연결 문자열을 넣을 수 있습니까? – devlord

+0

@lorddev : 어떤 종류의 시나리오를 묘사하고 있는지 명확하지 않지만, "평범한"mock 객체를 보낼 수 없다면, 그 객체와 상호 작용할 때 기대했던 값을 반환하도록 설정하십시오. , 당신은 아마도 당신의 레이어를 명확하게 분리하지 못했을 것입니다 - 다시 말하면, 쉽게 테스트 할 수 있도록 코드를 리팩토링하는 것이 좋습니다. –

+0

연결이 끊어진 Context mock에서 ObjectStateManager에 액세스하려고합니다. EF에 내장되어 있으며 유효한 EF 연결 문자열 없이는 만들 수없는 실제 ObjectContext에 의존합니다. – devlord

관련 문제