Start here. This is the direct spoken answer to practice first.
Overview
Uses constrained Python mocks to catch interface drift and model asynchronous calls honestly.
A plain Mock accepts almost any attribute and call, so a typo or removed method can leave a test green. spec limits available attributes to a reference object, while spec_set also prevents assigning attributes outside that interface. autospec goes further by copying callable signatures, so wrong arguments fail. AsyncMock represents an async callable and records whether it was awaited.