In a server application, I have a class called `Controller` which receive the incoming request. I also have a class called `Service` which do business logic and a class called `Database`. All classes are "public", but only one of them is really reachable from the "outside", the `Controller`. I am in a dilemma, should I only test the `Controller` since it is the only callable class or should I test all 3 classes separately? Pros for testing only the `Controller`: - Dead code easy to find, since it will not be covered - Refactor won't break the tests, the `Service` class is only an implementation detail - Some languages have the "internal" keyword that suggest that the class should be consider as an implementation detail, thus to be treated as private - Tests won't overlap on each other Cons: - Harder to know how a method in `Service` and `Database` are tested - It is the same an integration test - Setup is harder since the `Controller` depend everything. By harder I mean that I will have to create a `Database` which will be injected into the `Service` which will be injected into the `Controller` vs only mocking the `Service` which will be injected to the `Controller`.