An integration test is a black box test where we try to verify that the different parts of a system work well together. These parts can be different parts that you've developed yourself or integration of databases and web services.
Where the unit test focuses on testing the isolated unit, the integration test will touch upon a larger amount of code and essentially test the system as a whole. In unit testing, we go to a great extent of removing external dependencies, such as web services, databases, and filesystem, from the testing itself. In integration testing, we work to include these dependencies, which will provide the following effects:
We'll find where our code crashes because of unexpected results from the external system
Integration tests are usually slower because they are I/O-bound
Integration tests are brittle because they depend on the filesystem and network
The risk of external systems is that they provide results that are not expected. These results will not...