Modern software development process calls upon us to “unit-test” software and to do it systematically, as part of formal, comprehensive software testing. My monograph, The Case Against Unit Testing in Software Development, is a critique of unit testing. It demonstrates that unit testing, especially of object-oriented code, does not repay the effort.
Unit testing, done properly, is a great deal of work, and much object-oriented code is not amenable to unit testing. “Does not repay the effort” means mostly that it is not cost-effective. But it also means that it is not always effective. The book analyzes the daunting amount of effort required to do unit testing that counts. Then it presents actual code to further demonstrate the difficulty in fashioning unit tests. The same code illustrates how bugs can escape detection even by a sincere and competent effort to reveal them through unit testing.