Functional tests

Functional tests focus on whole features and functionalities instead of small code units. They are similar in their purpose to acceptance tests. The main difference is that functional tests do not necessarily need to use the same interface as the user. For instance, when testing web applications, some of the user interactions (or its consequences) can be simulated by synthetic HTTP requests or direct database access, instead of simulating real page loading and mouse clicks.

This approach is often easier and faster than testing with tools that are used in user acceptance tests. The downside of limited functional tests is that they tend to not cover enough parts of the application where different abstraction layers and components meet. Tests that focus on such meeting points are often called integration tests.