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
Post a Comment