One of the reasons the
Extreme Programming methodology pushes Unit Testing is that it is a powerful tool for
integration testing.
Extreme Programming champions the idea of continuous building and integrating of a system. Programmers are constantly adding, editing, and removing code from the system in parallel. Sounds dangerous, doesn't it? That is why integration testing is so important, hence the need for Unit Testing. Every atomic piece of code has its sister testing code, a Unit Test. This Unit Test is specifically tuned to check for the proper input and output for an atomic piece of code. With a collection of Unit Test, the entire system can be tested piece by piece. If a test fails, you know exactly what piece of code is not functioning properly. With this in mind, programmers can add, edit, and remove code to their hearts content. By checking the Unit Tests, they will know if their changes were successful, or if they broke part of the system.
This being said, Unit Testing is not a silver bullet for developing, but a part of an overall development strategy. Not implemented correctly, Unit Test can be harmful. Unit Test that are not kept up to date will display incorrect testing information, partial runs of Unit Test will produce unreliable data, or worse of all, Martin Fowler will mock you.