Created
September 7, 2015 21:49
-
-
Save JustinPealing/51f134a572a05c9387fa to your computer and use it in GitHub Desktop.
Fake implementation of DbSet<T> for unit testing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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