Any good software architects would be agree that when someone builds a new project from scratch, he mustn't carry about boundaries at the beginning (database, GUI, external services etc...) Indeed, he should construct heart of his software independently of any backend and think about them as just kind of "plugins" to the application.
TDD and acceptance testing promote that for each new feature:
- Write a failing acceptance test (end-to-end) for the feature
- Drive and complete your code design thanks to some unit tests
- Finished as soon as acceptance test passes.
However, a lot of articles explain that an acceptance test is a really really end-to-end test involving thus GUI (browser (using Selenium for instance) or some other interface).
Shouldn't Acceptance testing be based on the application's HEART and independent of any boundaries? It would force me to think about GUI for instance... :s
What is a good practice? Write two kind of Acceptance tests for each feature?: one for business logic and one ensuring that the GUI well works?