I find the concept of 'integration testing' confusing. There seems to be quite a few explanations and scopes:
- Functional/acceptance testing (e.g. testing the user interface with for example, Selenium)
- Testing the integration of different classes/modules of software together (simply testing two or more classes together, without them doing anything special like db calls and stuff)
- Testing the system configuration function/feature-independently (database integration works, dependencies are correctly injected, security base classes work)
- Testing the system as whole (running services that use databases, web services, etc.)
- etc. etc.
I begin to see integration testing as an umbrella term (as opposed to defining it in programming talks, where specific/strict meaning is often given to it):
- Integration testing contains:
- Unit integration testing (test integration of different classes within the same package without calling external libraries)
- Functional/acceptance testing (test final output of the software through Selenium, for example)
- System testing (includes various, more technical & non-feature related tests as listed in Wikipedia article)
In Maven default lifecycle, there is only 'test' and 'integration-test' phases. This seems to split the tests into roughly two categories and would go along with these assumptions.
There are many existing questions and answers looking for differences between unit testing, functional testing, regression testing, etc. in general. However, I am looking for more specific answer regarding integration tests: how do you categorize integration testing and what do you include inside it? Also, do you shun splitting software testing roughly into two categories as I have done: unit tests (1 unit) vs. integration tests (2+ units)?