c# - When to use Mock's Callback versus Return? -
c# - When to use Mock's Callback versus Return? -
i have, think, pretty straight forwards setup in search type created , passed through service layer , repository list of domain type returned. search type nil build look tree in repository method , results database come back. pretty simple
the repository interface:
public interface idonotsolicitrepo { ilist<dnscontract> selectwithcriteria(dns_search searchriteria); }
the service implementing repository:
public class donotsolicitservice : basebllservice, idonotsolicitservice { private readonly idonotsolicitrepo repo; private readonly ipartnerservice partnerservice; private readonly idonotsolicitreasonservice dnsreasonsvc; public donotsolicitservice(idonotsolicitrepo _repo, ipartnerservice _partnersvc, idonotsolicitreasonservice _dnsreasonsvc) { repo = _repo; partnerservice = _partnersvc; dnsreasonsvc = _dnsreasonsvc; } public serviceresult<dnscontract> selectwithcriteria(dns_search searchriteria) { var results = repo.selectwithcriteria(searchriteria); homecoming returnserviceresult(results); } }
i'm working on learning moq project , can't figure out if i'm supposed utilize callback() or return(). overall points of both, neither seem work me @ moment.
the test:
[test] public void selectwithcriteria_firstname() { mockrepository.setup(mr => mr.selectwithcriteria(it.isany<dns_search>())) .returns((ilist<dnscontract> records) => new list<dnscontract> { new dnscontract {firstname = "unit", lastname = "test"}, new dnscontract {firstname = "moq", lastname = "setup"} }); dnssvc = new donotsolicitservice(mockrepository.object, new partnerservicestub(), new donotsoicitreasonservicestub()); var result = dnssvc.selectwithcriteria(new dns_search { firstname = "unit" }); assert.isnotnull(result); assert.istrue(result.data.any()); }
the error:
system.argumentexception unhandled user code message=object of type 'ep.rest.common.resthelpers.dns_search' cannot converted type 'system.collections.generic.ilist`1[ep.rest.domain.contracts.dnscontract]'.
now, i've read returns() method returns type passed in, can see that's cause of error. in real world want different type returned. i've attempted create callback delegate none of felt right.
just drop lambda on .returns i.e.
.returns(new list<dnscontract>());
your original passing in arguments method returns parameterize results eg if pulling source can homecoming different info depending on input.
or
.returns<ilist<dnscontract>>(new list<dnscontract>(){...});
c# unit-testing moq
Comments
Post a Comment