Stub objects provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test.
Mock objects are pre-programmed with expectations which form a specification of the calls they are expected to receive.
mocks are about behavior and stubs are about state
stubs provide state (data) back to the method under test and your unit test has all the information it needs within itself to determine success or failure
Mocks on the other hand are about behavior. Under the current conditions, did my method pass the right values? Did it make all of the right calls and ONLY the calls that were necessary?