c# - How to add an item to a Mock DbSet (using Moq) -


i'm trying set mock dbset testing purposes. used tutorial here, http://www.loganfranken.com/blog/517/mocking-dbset-queries-in-ef6/ , modified calling getenumerator returns new enumerator each time (another problem having). however, having difficulty adding items dbset.

the output precount = 3 postcount = 3. however, expect precount = 3 postcount = 4. appreciated.

static void main(string[] args)     {         debug.writeline("hello debug");          list<string> stringlist = new list<string>         {             "a", "b", "c"         };          dbset<string> mydbset = getqueryablemockdbset(stringlist);         int precount = mydbset.count();         mydbset.add("d");         int postcount = mydbset.count();         debug.writeline("precount = " + precount + " postcount = " + postcount);     }      private static dbset<t> getqueryablemockdbset<t>(list<t> sourcelist) t : class     {         var queryable = sourcelist.asqueryable();          var dbset = new mock<dbset<t>>();         dbset.as<iqueryable<t>>().setup(m => m.provider).returns(queryable.provider);         dbset.as<iqueryable<t>>().setup(m => m.expression).returns(queryable.expression);         dbset.as<iqueryable<t>>().setup(m => m.elementtype).returns(queryable.elementtype);         dbset.as<iqueryable<t>>().setup(m => m.getenumerator()).returns(() => queryable.getenumerator());          return dbset.object;     } 

mydbset not real implementation of dbset mock means it's fake , needs setup methods need. add not exception needs set need otherwise nothing.

add following , when mydbset.add("d"); called 'd' added list , can returned later.

dbset.setup(d => d.add(it.isany<t>())).callback<t>((s) => sourcelist.add(s)); 

complete code

private static dbset<t> getqueryablemockdbset<t>(list<t> sourcelist) t : class {     var queryable = sourcelist.asqueryable();      var dbset = new mock<dbset<t>>();     dbset.as<iqueryable<t>>().setup(m => m.provider).returns(queryable.provider);     dbset.as<iqueryable<t>>().setup(m => m.expression).returns(queryable.expression);     dbset.as<iqueryable<t>>().setup(m => m.elementtype).returns(queryable.elementtype);     dbset.as<iqueryable<t>>().setup(m => m.getenumerator()).returns(() => queryable.getenumerator());     dbset.setup(d => d.add(it.isany<t>())).callback<t>((s) => sourcelist.add(s));      return dbset.object; } 

output

hello debug precount = 3 postcount = 4 

Comments