2012-07-23 2 views
1

EF 모델을 테스트 할 것입니다. 이를 위해 IDbContext 클래스를 생성했습니다. 하지만 쓰는 방법을 모르기 때문에 저장 및 삭제 메서드를 다시 작성하는 방법을 모르겠습니다. db.Partner.AddObject (obj);이 메소드를 다시 작성하는 방법은 무엇입니까?테스트 엔티티 프레임 워크 모델

public interface IDbContext 
    { 
     int SaveChanges(); 
     DbSet<Partner> Partner { get; set; }  
    }  
public class PartnerRepository : IPartnerRepository 
{ 
    readonly IDbContext _context; 
    public PartnerRepository() 
    { 
     _context = (IDbContext)new VostokPortalEntities(); 
    } 
    public PartnerRepository(IDbContext context) 
    { 
     _context = context; 
    } 

    public void Save(Partner obj) 
    { 
     using (var db = new VostokPortalEntities()) 
     { 
      if (obj.PartnerID == 0) 
      { 
       db.Partner.AddObject(obj); 
      } 
      else 
      { 
       db.Partner.Attach(obj); 
       db.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified); 
      } 
      db.SaveChanges(); 
     } 
    } 
    public void Delete(Partner obj) 
    { 

     using (var db = new VostokPortalEntities()) 
     { 

      db.Partner.Attach(obj); 
      db.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Deleted); 
      db.SaveChanges(); 
     } 
    } 
    public List<Partner> GetAll() 
    { 
     using (var db = new VostokPortalEntities()) 
     { 
      return db.Partner.OrderByDescending(i => i.PartnerID).ToList(); 
     } 
    } 
} 

EF 모델을 테스트하는 적절한 방법입니까?

답변

4

리포지토리의 단위 테스트에는 많은 시간이 걸리며 많은 이점을 제공하지 않습니다. 왜? 저장소에는 복잡한 비즈니스 로직이 없으므로 보통 기본 데이터 액세스 API (즉, ORM)에 대한 간단한 호출이 있습니다. 전체 스택 수락 테스트를 작성하는 데 시간을 투자하는 것이 더 좋다고 생각합니다. 또한 저장소가 작업을 수행하는지 표시합니다.

이 BTW 흥미로운 규칙 Don't Mock what you don't own이 : 우리가 소유하지 않은 유형의 조롱 버전과의 상호 작용을 테스트함으로써

, 우리는 정말 올바른 동작을 확인하기 위해 테스트를 사용하여도 에되지 않습니다 공동 작업자의 디자인을 몰아냅니다. 우리의 모든 테스트는 이며 다른 유형의 작동 방식에 대한 추측을 반복합니다. 물론, 그것은 테스트보다 좋지만 반드시 그렇지는 않습니다.

관련 문제