Use whenever adding or changing behavior, to enforce test-driven development — no implementation before a failing test exists — and characterization tests before touching untested legacy code.