I like to perform two types of testing: isolation and integration.
My isolation testing involves unit testing classes by mocking out all interactions with other classes. Using a mocking framework like Powermock, I can mock out all object interactions as well as verify that all of the defined (and not defined) interactions occurred during each test. These isolation tests are the low level tests that can give you the code coverage metrics your team expects. Continuous integration tools like Hudson can be used to automate the running and metrics gathering of your isoloation unit tests.
Integration testing involves running flows that invoke multiple classes. I like to build automated suites that test happy path scenarios as well as some error scenarios. However I don't build and maintain suites that touch every line of code in the app. It's a cost and risk based decision. If you can automate your integration tests using a tool like fitnesse, you can also use your integration tests as a smoke test for your development environment, running it throughout the day as needed to make sure your app and environment are up and running with no issues.
I think this is a very good topic to think about. I don't think there's a single right answer on this as there are a lot of factors to consider when making decisions on your testing approaches.