What do your tests look like?
Are you sure that you are writing unit tests and not higher level tests of multiple components of your code? A pure unit test should only be calling a single method, and that method will hopefully have limited calls to other methods (possibly via mocking).
By focusing on the smallest unit possible, you can write code to test specific edge cases. Whereas, if you are testing at a higher level, you will often have to write all types of permutations of edge-cases. Once you have all the smallests units covered, you can write some higher level integration tests to make sure that all those units are assembled correctly.
For example, if I had an application that reads in a CSV file of stock quotes and averages all the quotes for a given day, I would write several tests:
- Unit tests around the CVS parsing
- Unit tests around the date grouping
- Unit tests around the averaging
- Unit tests around the display of the answer
- And a small number of integration tests that might take a very small CVS file and pass it through the entire process.
I apologize if I am making assumptions about your unit tests, but from my experience, I find that often what people call unit tests are not real unit tests and rather integration tests (or whatever you prefer to call them, e.g. functional tests, etc.). I am personally very guilty of writing tests that were too broad, and every time I now write tests I have to force myself to remember to really test a unit at a time.