July 2019
Intermediate to advanced
502 pages
14h
English
Ideally, an object should have all its dependencies injected when it is created. Let's look at the NewLinkManager() function:
func NewLinkManager(linkStore LinkStore, socialGraphManager om.SocialGraphManager, natsUrl string, eventSink om.LinkManagerEvents, maxLinksPerUser int64) (om.LinkManager, error) { ... }
This is almost the ideal situation. We get interfaces to the link store, social graph manager, and to the event sink. However, there are two dependencies that are not injected here: link_checker_events and the built-in net/http package. Let's start with mocking the link store, the social graph manager, and the link manager event sink, and then consider the more difficult cases.
LinkStore is an interface that's defined ...