Advertisement
benjaminvr

FakeDbSet for mocking / moq

May 17th, 2022
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.06 KB | None | 0 0
  1. public class FakeDbSet<T> : DbSet<T>, IQueryable, IEnumerable<T> where T : class {
  2.     List<T> _data;
  3.  
  4.     public FakeDbSet(List<T> items=null) {
  5.         _data = items ?? new List<T>();
  6.     }
  7.  
  8.     public void Clear() {
  9.         _data = new();
  10.     }
  11.  
  12.     public override T Find(params object[] keyValues) {
  13.         throw new NotImplementedException("Derive from FakeDbSet<T> and override Find");
  14.     }
  15.  
  16.     public override EntityEntry<T> Add(T item) {
  17.         _data.Add(item);
  18.         return item as EntityEntry<T>;
  19.     }
  20.  
  21.     public override EntityEntry<T> Remove(T item) {
  22.         _data.Remove(item);
  23.         return item as EntityEntry<T>;
  24.     }
  25.  
  26.     public override EntityEntry<T> Attach(T item) {
  27.         return null;
  28.     }
  29.  
  30.     public T Detach(T item) {
  31.         _data.Remove(item);
  32.         return item;
  33.     }
  34.  
  35.     public T Create() {
  36.         return Activator.CreateInstance<T>();
  37.     }
  38.  
  39.     public TDerivedEntity Create<TDerivedEntity>() where TDerivedEntity : class, T {
  40.         return Activator.CreateInstance<TDerivedEntity>();
  41.     }
  42.  
  43.     public List<T> Local {
  44.         get { return _data; }
  45.     }
  46.  
  47.     public override IEntityType EntityType => throw new NotImplementedException();
  48.  
  49.     public override void AddRange(IEnumerable<T> entities) {
  50.         _data.AddRange(entities);
  51.     }
  52.  
  53.     public override void RemoveRange(IEnumerable<T> entities) {
  54.         for (int i = entities.Count() - 1; i >= 0; i--) {
  55.             T entity = entities.ElementAt(i);
  56.             if (_data.Contains(entity)) {
  57.                 Remove(entity);
  58.             }
  59.         }
  60.  
  61.     }
  62.  
  63.     Type IQueryable.ElementType {
  64.         get { return _data.AsQueryable().ElementType; }
  65.     }
  66.  
  67.     Expression IQueryable.Expression {
  68.         get { return _data.AsQueryable().Expression; }
  69.     }
  70.  
  71.     IQueryProvider IQueryable.Provider {
  72.         get { return _data.AsQueryable().Provider; }
  73.     }
  74.  
  75.     IEnumerator IEnumerable.GetEnumerator() {
  76.         return _data.GetEnumerator();
  77.     }
  78.  
  79.     IEnumerator<T> IEnumerable<T>.GetEnumerator() {
  80.         return _data.GetEnumerator();
  81.     }
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement