Skip to content

Instantly share code, notes, and snippets.

@JustinPealing
Created September 7, 2015 21:49
Show Gist options
  • Save JustinPealing/51f134a572a05c9387fa to your computer and use it in GitHub Desktop.
Save JustinPealing/51f134a572a05c9387fa to your computer and use it in GitHub Desktop.
Fake implementation of DbSet<T> for unit testing
public class FakeDbSet<T> : DbSet<T>, IQueryable
where T : class
{
private readonly Func<T, object[], bool> _find;
readonly ObservableCollection<T> _items;
private IQueryable<T> _query;
public FakeDbSet(Func<T, object[], bool> find = null)
{
_find = find;
_items = new ObservableCollection<T>();
_query = _items.AsQueryable();
}
public override ObservableCollection<T> Local { get { return _items; } }
IQueryProvider IQueryable.Provider { get { return _query.Provider; } }
Expression IQueryable.Expression { get { return _query.xpression; } }
public override IEnumerable<T> AddRange(IEnumerable<T> entities)
{
foreach (var entity in entities)
{
_items.Add(entity);
}
return entities;
}
public override T Add(T item)
{
_items.Add(item);
return item;
}
public override IEnumerable<T> RemoveRange(IEnumerable<T> entities)
{
foreach (var entity in entities)
{
_items.Remove(entity);
}
return entities;
}
public override T Remove(T item)
{
_items.Remove(item);
return item;
}
public override T Attach(T item)
{
_items.Add(item);
return item;
}
public override T Create()
{
return Activator.CreateInstance<T>();
}
public override TDerivedEntity Create<TDerivedEntity>()
{
return Activator.CreateInstance<TDerivedEntity>();
}
public override T Find(params object[] keyValues)
{
if (_find == null)
{
throw new NotSupportedException();
}
return _items.SingleOrDefault(e => _find(e, keyValues));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment