Friday, 15 June 2012

c# - Pass multiple mock objects to a method -



c# - Pass multiple mock objects to a method -

i have method createaccount test. using moq same.

under createaccount method, there multiple table insertion methods belongs 2 classes accountrepository , billingrepository

i have setup moq don't know how utilize multiple moq objects.

below code snippet

mock<accountrepository> moq = new mock<accountrepository>(); mock<billingrepository> moqbill = new mock<billingrepository>(); moq.setup(x => x.addtable_1(new addtable_1 { })); moq.setup(x => x.addtable_2(new addtable_2 { })); moqbill.setup(x => x.table_3());

createaccount method takes 4 parameters , under applicationservice class

public class applicationservice { public createaccountserviceresponse createaccount(authenticateapp app, customerinfo customer, serviceinfo service, optional op) { // validation code //..................... // code save info tables obj_1.addtable_1(objdata_1); obj_1.addtable_2(objdata_2); obj_2.addtable_3(objdata_3); } }

please suggest solution. how can these 3 methods skipped ?

thanks in advance.

you have provide means inject obj_1 , obj_2, since seem represent instances of accountrepository , billingrepository, resp.

typically, might want using constructor injection. extending snippet provided, might this:

public class applicationservice { private readonly accountrepository _accountrepository; private readonly billingrepository _billingrepository; public applicationservice(accountrepository accountrepository, billingrepository billingrepository) { _accountrepository = accountrepository; _billingrepository = billingrepository; } public createaccountserviceresponse createaccount(authenticateapp app, customerinfo customer, serviceinfo service, optional op) { // validation code //..................... // code save info tables _accountrepository.addtable_1(objdata_1); _accountrepository.addtable_2(objdata_2); _billingrepository.addtable_3(objdata_3); } }

now can inject mocks class under test:

public void createaccount_whencalledlikethis_doessomecoolstuff() { var accountrepomock = new mock<accountrepository>(); // set var billingrepository = new mock<billingrepository>(); // set var appservice = new applicationservice(accountrepomock.object, billingrepomock.objcet); // more setup // deed var response = appservice.createaccount(...); // assert on response and/or verify mocks }

c# unit-testing mocking moq

No comments:

Post a Comment