This document discusses the proper use of mocks in unit testing. It provides examples of both good and bad uses of mocks. Some key points made include: - Mocks are useful for isolating tests from external dependencies like databases, networks, or unpredictable functions. - Tests using mocks should focus on the code being tested, not the mocks themselves. Asserting properties of mocks directly can lead to brittle tests. - Mock only types that the code being tested owns. External dependencies should be abstracted behind adapter layers and the adapters tested instead of the external code. - While mocks can help write tests, passing tests don't guarantee correct behavior. Integration tests are still needed to validate overall system function