I included a excerpt from wikipedia because I think it describes it well. As for a more personal answer... I do network programming and one of the protocols we use is SMTP. We have to use a MIB object which is huge. It comes from autogenerated code made by a perl script that reads a special formal specification language.
When we unit test in something like vectorcast or cppunit the framework has issues handling the object due to the number of events created. We would use a mock object contianing a subset of the values from the MIB as required for the area of code we were testing. You can do this in a number of ways, but its usually an inheritance trick or a nifty pointer cast in C++.
You would also use mock objects in another context... as some of your real objects that would normally have dynamic values effected by timers, user actions, network events it can be hard to simulate a real object state. So you would provide mock values to the object which aid testing despite the fact that in your testing you're probably not chanign the values (i.e. they're static but helping you test a system that will be dynamically changing).
Anyway, its a somewhat general term but those are the areas people usually apply it in my experiences.
"In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts."