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