I am wondering whether there are some design patterns on programming to make programs easier for white-box testing. I am not talking about Unit Test, but higher level testing, such as white-box based functional testing, system testing or some boundary testing.
For example:
For GUI based program, we can reserve a hidden switch to read inputs from a text file instead of GUI.
For some HTTP based C/S application, providing a parameter to disable the gzip option during package transmit which make it easier to use Fiddler to change the HTTP package.
Any other patterns or principles?