Integration tests

Integration tests represent a higher level of testing than unit tests. They test bigger parts of the code and focus on situations where many application layers or components meet and interact with each other. The form and scope of integration tests varies depending on the project's architecture and complexity. For example, in small and monolithic projects, this may be as simple as running more complex functional tests and allowing them to interact with real backing services (databases, caches, and so on), instead of mocking or faking them. For complex scenarios or products that are built from multiple services, the real integration tests may be very extensive and even require running the whole project in a big distributed environment that mirrors the production environment.

Integration tests are often very similar to functional tests, and the border between them is very blurry. It is very common that integration tests are also logically testing separate functionalities and features.