누군가이 저장소 클래스를 올바르게 모의하는 법을 보여 주실 수 있습니까? 기본적으로 나는 서비스 계층을 쉽게 테스트 할 수 있도록 조롱하고 싶다. 오전 테스트 프로젝트에서 moq을 사용하여 # moq. 대부분 문제가있는 곳은 Query, Filter, Include 및 OrderBy 메소드에서 사용되는 가상 인터페이스 패턴입니다. Repository mock에 주입 한 RepositoryQuery를 제대로 반환 할 수 있도록 어떻게 모의합니까?moq을 사용하여이 클래스들을 모의하는 방법
아래에 표시된 코드는 데이터베이스와 통신하는 데이터베이스 계층의 일부이므로 외부 의존성없이 내 서비스 계층을 쉽게 테스트 할 수 있도록 조롱하고 싶습니다.
public class Repository<TEntity> : IRepository<TEntity> where TEntity : BaseEntity
{
private readonly Guid _instanceId;
private readonly DbSet<TEntity> _dbSet;
private readonly IDbContext _context;
public Repository(IDbContext context)
{
_context = context;
_dbSet = context.Set<TEntity>();
_instanceId = Guid.NewGuid();
}
public virtual IRepositoryQuery<TEntity> Query()
{
var repositoryGetFluentHelper = new RepositoryQuery<TEntity>(this);
return repositoryGetFluentHelper;
}
internal IQueryable<TEntity> Get(
List<Expression<Func<TEntity, bool>>> filters = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
List<Expression<Func<TEntity, object>>> includeProperties = null,
int? page = null,
int? pageSize = null)
{
IQueryable<TEntity> query = _dbSet;
if (includeProperties != null)
{
includeProperties.ForEach(i => query = query.Include(i));
}
if (filters != null && filters.Any())
{
query = filters.Aggregate(query, (current, filter) => current.Where(filter));
}
query = orderBy != null ? orderBy(query) : query.OrderBy(a => a.Id);
if (page != null && pageSize != null)
{
query = query
.Skip((page.Value - 1)*pageSize.Value)
.Take(pageSize.Value);
}
return query;
}
}
. 우리는 당신을 도울 수 없습니다. 그것은 당신에게 순전히 달려 있습니다. 사람들이 각 테스트에 대해 모의 한 내용을 보려면 기본적인 조롱 자습서를 찾아보십시오. 예를 들어, 하나의 기능을 테스트하기 위해서만 전체 저장소를 조롱하지 마십시오. –
안녕하세요, 데이터 저장소와 통신하기 때문에 위의 코드 중 일부는 내 데이터 레이어에서 사용한 것이며 일부 기능 만 테스트하지 않고 전체 서비스 레이어를 테스트 할 수 있도록 완전히 모의하고 싶습니다. – Cizaphil