Why pure functions make tests simpler, and why boundaries still need disciplined coverage.
Functional style makes testing easier because pure functions are deterministic: given the same inputs, you get the same outputs. That removes a lot of mocking and setup that Java developers often associate with tests.
But the “easy tests” are only half the story. Real systems still have boundaries: databases, HTTP, time, randomness, files, queues, and Java libraries. The best Clojure codebases treat these as explicit edges and test them with integration tests where it matters.
This chapter helps you build a layered approach: test the pure core deeply, then test the edges realistically, with fast feedback at the REPL.