While fake dependencies are really useful for unit testing, they lack in features like tracking function calls, intercepting arguments, etc.. that makes unit testing easier. Mock dependency is a dependency which offers all the benefits of fake dependencies and more features to make unit testing easier.
It is not going to be easy to create and maintain mock dependencies; this is why we generally use mocking libraries to create mock dependencies.
If we take the same passenger discount example that we have seen previously
module promotions function isPromotionsAvailable(): . . .
module discounts function isDiscountAvailable(age): if promotions.isPromotionAvailable() && age > 60: print("discount available") else: print("discount not available")
we create, setup and use mock version of
isPromotionAvailable() like this in the tests:
function test_isDiscountAvailable(): // arrange mockPromotions = mock(promotions) // create mock promotion mockPromotions.isPromotionAvailable().return(true) // setup the method to return true promotions = mockPromotions // replace promotions with mockPromotions age = 65 // act result = discounts.isDiscountAvailable(age)
Depending on the language and framework we use, the way we create, setup and use mock dependencies will be different.