And then what if the interface of the dependent class changes during the course of testing?
Then yes, you do need to change your mock code. This is a bit of a problem refactoring. Anything which changes an interface will always require code changes both in the production code and in the test code. The trick is to try and minimize the number of places you need to change the code. In your tests use Creation Methods (little factory methods) to set up your object under test and any of it's dependencies (mock or real objects). Mots of the differences will often be in the setup of the object you're testing. If you can delegate that setup to a single method or a few smaller methods then you have a lot less code to change if your interface changes. Anything which minimizes duplication in test code is good in the just the same way avoiding duplication in production code is. You have to maintain your tests just like you have to maintain your production code -- just try to make it as easy as possible to do that.