Test-Driven Development checks intention. Customer Acceptance Tests check desire.

When a programmer uses TDD, she knows what the customer desires. She thinks about what she intends to make the program do next, as a step toward what is desired. She checks that it does not do that, then makes the program do it. She is using TDD to help direct her intention and to check that she has accomplished her intention.

The customer knows what she desires. When she provides acceptance tests and examines the results, she is checking to see whether she has received software that meets her desire.

This may seem like an awfully fine distinction and, who knows, in a day or a year I may have or hear a better way to put it. But the customer acceptance tests are about the goal, and the programmer tests are about the path to the goal.