One of the best descriptions of the hierarchy of tests that I have seen comes from "Growing Object-Oriented Software, Guided by Tests" by Steve Freeman and Nat Price.
1. Acceptance Tests: Does the whole system work?
2. Integration Tests: Does our code work against code we can't change?
3. Unit Tests: Do our objects do the right thing, are they convenient to work with?
Can we now get on with some work, rather than discussing definitions ad nauseam?