If you find yourself creating partial mocks on a regular basis, it might be a sign that too much state and functionality is being thrown into a small number of classes. This can make your code more difficult to maintain and reason about and consequently harder to unit test. It can also lead to code duplication or circular dependencies if you find out later that some other component in your system needs a subset of the functionality contained in one of your large classes.
Try to identify related groups of functionality and break those out into smaller helper classes that can be unit tested independently. This will make the code easier to understand, enables you to write finer-grained unit tests, and you may find opportunities to reuse the functionality you've split out in different contexts sometime in the future. If you're using a dependency injection framework like Spring or Guice, it will be easy to wire those objects back together when your application runs.
Figuring out the best way to refactor large classes is something one learns through experience. Generally, though, I try to look at what a class is doing and give names to the different roles it plays at different points in processing. Then I create new classes for those roles. For example, if I had a class that reads through a server log file and emails an administrator when certain entries are found there, I might refactor that into one class that knows how to parse log files, a second class that looks for the trigger entries, and a third that knows how to notify administrators. The trick is to limit how much "knowledge" is contained in each class. This also gives you the opportunity to abstract out general concepts. For example, by breaking your classes up this way, you could support different notification mechanisms or kinds of trigger conditions in the future without impacting your log parsing class or its unit test.