How to use Moq in unit test that calls another method in same class -
hi new moq framework , have questions how use it. give example , hope answers.
i have 2 classes, interface , and implementation:
public class vehicle{ public string registrationnumber {get; set;} public long vehicleidentifier { get; set; } public tyre tyrespecification { get; set; } } public class tyre { public long numberoftyres {get; set;} public long tyresize { get; set;} } public interface iselecter { vehicle getvehiclebyregistrationnumber(string registrationnumber); tyre gettyrespecification(long vehicleidentifier); } public class selecter : iselecter { public vehicle getvehiclebyregistrationnumber(string registrationnumber) { var vehicle = 'database give vehicle specification'; //then things vehicle object //get tyre specification vehicle.tyrespecification = gettyrespecification(vehicle.vehicleidentifier); return vehicle; } public tyre gettyrespecification(long vehicleidentifier) { var tyre = 'external manufacture system gets tyre specification'; //then thing tyre before returning object return tyre; } } i want write 2 tests methods. problem when write test getvehiclebyregistrationnumber not know how mock method call gettyrespecification.
the test methods this:
[testclass] public class selectertest { [testmethod] public void gettyrespecification_test() { //arrange var tyre = new tyre { numberoftyres = 4, tyresize = 18 }; var mockselecter = new mock<iselecter>(); mockselecter.setup(s=>s.gettyrespecification(it.isany<long>())).returns(tyre); //act var tyrespec = mockselecter.object.gettyrespecification(123456); //assert assert.istrue(tyrespec.numberoftyres == 4 && tyrespec.tyresize == 18); } [testmethod] public void getvehiclebyregistrationnumber_test() { //arrange var vehicle= new vehicle { vehicleidentifier = 123456, registrationnumber = abc123, tyrespecification = new tyre { tyresize = 18, numberoftyres = 4 }}; var mockselecter = new mock<iselecter>(); mockselecter.setup(s=>s.getvehiclebyregistrationnumber(it.isany<string> ())).returns(vehicle); //act var vehicle = mockselecter.object.getvehiclebyregistrationnumber(123456); //assert assert.istrue(vehicle.registrationnumber == "abc123"; } } in test method getvehiclebyregistrationnumber_test how mock call gettyrespecification?
you shouldn't trying mock method on class you're trying test. mocking frameworks used replace actual calls made dependencies class takes in fake calls can focus on testing behaviour of class without being distracted external dependencies has.
there no external dependencies taken in selecter class don't need mock anything. advocate not mocking if don't have , testing actual code itself. obviously, keep test atomic, need mock calls external dependencies if there any.
Comments
Post a Comment