I am working on a software that interfaces with a production machine (using some industry standard as the communication protocol).
As a result, most methods of the communicator class are triggered by messages from the machine, they are never called from the outside. So I made them private.
If I want to test this functionality, I need to create a simulator that simulates the machine behaviour, in order to run some black box tests on this class. Building the simulator would probably take at least 50% of the time I needed for the communicator.
I would have made the functions that are triggered by the machine public, but that started some very heated arguments in our team...