c# - Relationship Checks when Mocking EF Context -
c# - Relationship Checks when Mocking EF Context -
i'm wondering if there way simulate foreign key checks when unit testing repository on top of ef using moq? have next code should technically fail because 1 of relationships isn't nowadays in either database or mocked sets on context.
var entityset = new mock<dbset<myentity>>(); var mockcontext = new mock<mycontext>(); mockcontext.setup(x => x.set<myentity>()).returns(entityset.object); var myentity = new myentity { refid = "abcd", //foreign key not exist in context }; var repo = new myrepo<myentity>(mockcontext.object); repo.add(myentity); //repo.add() public void add(tentity entity) { dbset.add(entity); context.savechanges(); }
i expect code fail since object reference id doesn't exist succeeds , verifies add together mockcontext succeed. i'm not sure purpose unit testing pattern serves.
since you're mocking dbset
, need tell want exception happen.
in other words, mocked dbset
behave (since using loose mocks) if fine; mocked dbset
has no concept of foreign key constraints--much less domain's specific constraints--since isn't dbset
, , error never occur.
to tell mocked set want exception on add
, you'd need setup entityset
this:
var myentity = new myentity { refid = "abcd", //foreign key not exist in context }; entityset.setup(p => p.add(myentity)) .throws(new yourforeignkeyconstraintexception());
to have savechanges
method throw, add together line instead of 1 above:
mockcontext.setup(p => p.savechanges()) .throws(new yourforeignkeyconstraintexception());
c# entity-framework moq
Comments
Post a Comment