2012-09-14 3 views
2

EF를 사용하여 MVC 응용 프로그램을 만들고 현재 일반 저장소 패턴 (예 : Generic Repository Pattern)을 사용하고 있습니다. 모든 저장소는 각 저장소에서 새로운 컨텍스트가 만들어지고 두 개 이상의 리포지토리와 작업하는 것이 내 응용 프로그램에 필요하다는 사실을 제외하고는 모두 훌륭했습니다. StructureMap을 사용하면서 추가했습니다.가짜 DbContext 만들기

x.For<IDbContext>().HttpContextScoped().Use(context => new MyContext()); 

여기서 IDbContext는 각각의 메서드를 가지며 더 이상 일반 적이 지 않지만 생성자를 통해 전달됩니다.

문제를 테스트 할 때 문제가 발생합니다. 예를 들어 HashTable 또는 HashSet과 같은 것으로 메모리 저장 공간 (빠른 데이터, 사용자 정의, 데이터 제어 용이)을 만들고 싶습니다. 내가 알 수없는 것은 해시 테이블에서 데이터를 가져 오는 IDbContext의 가짜 구현을 만드는 방법입니다. 을 될 것 같지 않습니다

public interface IDbContext : IDisposable 
    { 
     IDbSet<TEntity> Set<TEntity>() where TEntity : class; 
     DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class; 
     int SaveChanges(); 
    } 

내가 가짜 컨텍스트를 만드는 등 큰 실수를했다고 가정의 현재 상황에서 : 참고로 IDbContext은 (일반 저장소에 DbContext에서 사용하는 유일한 방법) 다음과 같습니다 정기적 인 루틴. 내 응용 프로그램의 아키텍처를 개선하고 더 테스트 할 수있는 방법에 대한 조언. 내가 과거에 이런 짓을 한

답변

0

나는 일반적으로처럼 내 테스트 데이터 뭔가 유지하기 위해 사전을 사용했습니다 : 나는 포장으로 성공을 많이 했어 폭 넓은 관점에서

public class FakeDb : IDbContext 
{ 
    private Dictionary<Type, Object> _lists = new Dictionary<Type, Object>(); 
    public List<T> GetList<T>() 
    { 
     var type = typeof(T); 
     if(!_lists.Contains(type)) 
     { 
      _lists.Add(type, new List<T>()); 
     } 
     return (List<T>)_lists[type]; 
    } 

    /// 
} 

을 내 쿼리 구축 논리를 individual classes rather than repository classes까지 올립니다.