With iterative and incremental development we obviate the need for a separate test activity, which was really only necessary in the first place because conventional programming languages made it so easy to make mistakes. As with conventional languages, it results in simple programming mistakes, unanticipated interaction, and incorrect or missing behavior. Reuse in no way guarantees that a sufficient number of paths and states have been exercised to reveal all faults. Reuse is limited to the extent that supplier classes are trustworthy. Debugging by reuse is simply not an efficient strategy for rapid, large-scale development.
Testing gets in the way.
Class development is an exploratory process, not unlike composing music or prose. The simple act of expression is sufficient to create trustworthy classes. While poorly organized testing is usually an ineffective hassle, a good testing strategy contributes. Mill's Clean Room approach and Glib's inspections. Both assert that unit testing effort can be minimized if the formal, defined, and repeatable development practices they recommend are used.