2012-03-09 4 views
2

저는 프로젝트 전체에서 Entity Framework 4, Ninject 및 Moq를 사용하고 있습니다. EF4가 사용되는 서비스 클래스의 고기를 얻으면 데이터 컨텍스트를 인스턴스화합니다. 이것은 나쁘다.EF4 + Ninject + Moq하는 방법?

내 서비스에 데이터 컨텍스트를 주입하여 유닛 테스트가 모의 데이터 컨텍스트에서 작동 할 수있게하려고합니다. 전에 nHibernate로 해봤지만 EF4로는 이해할 수 없으며 온라인에서 견고한 예제를 찾을 수 없습니다.

누구든지 해결책과 예제를 가르쳐 줄 수 있습니까? 감사합니다!

답변

4

NHibernate 3.0 cookbook에서 설명한대로 NHibernate를 테스트하는 기술과 유사하게 SQLite를 사용하여 메모리 데이터베이스를 테스트하는 것이 좋습니다.

가짜 DbContext를 만드는 방법에 대한 설명은 here을 참조 할 수도 있습니다.

+0

이것은 아마도 내가 찾은 최고의 사례이지만, 실제로 데이터베이스에 접촉하는 코드를 통합하는 방법을 건너 뛰고 대신 모든 것을 조롱하는 방법에 대해 이야기합니다. http://blogs.msdn.com/ b/adonet/archive/2009/12/17/walkthrough-test-driven-with-entity-framework-4-0.aspx EF4 프로젝트의 실제 예제를 찾고 싶습니다. db, 조바꿈/테스트 등을 위해 수정하는 방법 – znelson

+2

이 예에서는 저장소 구현을 모의 할 수 있도록 EF를 통해 저장소 패턴을 사용합니다. 그러나 ORM이있는 저장소를 사용하지 않는 것에 대한 좋은 주장이 있습니다. http://stackoverflow.com/questions/5625746/generic-repository-with-ef-4-1-what-is-the-point/5626884#5626884를 참조하십시오. 또한 통합 테스트 사용에 대한 설명은 http://stackoverflow.com/questions/5609508/asp-net-mvc3-andentity-framework-code-first-architecture/5610685#5610685를 참조하십시오. – devdigital

+0

인수 중 하나는 리포지토리를 사용하고 구현을 조롱하면 Entity Framework를 테스트하지 않고 LINQ 쿼리가 프로덕션 환경에서 실패 할 수 있으므로 메모리 데이터베이스를 사용한 통합 테스트가 실제로 EF를 테스트한다는 것입니다. – devdigital

0

우리 회사에서는 TransactionScope와 함께 로컬 개발 데이터베이스를 사용하여 변경 사항을 롤백합니다. 고유 한 부작용은 삽입물을 테스트 할 때 신원을 높이는 것이지만, 이것은 문제가되지 않습니다.

장점은 데이터베이스에 대한 실제 테스트가 있다는 것입니다.

전자 메일을 보내거나 다른 서버로 데이터를 보내야하는 경우 ninject/moq를 사용하여 종속성 주입과 함께 IoC로 돌아가십시오.

테스트 프로젝트에 Entity Framework 및 연결 문자열을 추가해야합니다.

[TestClass] 
public class NameValueTest 
{ 
    [TestMethod] 
    public void Create() 
    { 
     NameValueController controller = new NameValueController(); 

     using (var ts = new TransactionScope()) 
     { 
      Assert.IsNotNull(controller.Create(new Models.NameValue() 
      { 
       name1 = "1", 
       name2 = "2", 
       name3 = "3", 
       name4 = "4" 
      })); 

      //no complete, automatically abort 
      //ts.Complete(); 
     } 
    } 
} 

이 정보가 도움이되기를 바랍니다.