To ensure high code quility each release is tested extensively by many
test suites. The test suites are executed both on native Linux and on
many of the supported boards. See Test suites for a list of all
test suites that are executed before each release.

The native Linux test suites are executed automatically on each commit.

Each module shall have unit tests to verify that the implementation
works as expected and that future refactoring does not break legacy.

All unit tests except low level drivers and networking are hardware
independent. This makes it possible to use common Linux tools (gcov,
valgrind, gdb, etc.) to debug and gather statistics of a module, which
is very useful.

For low level drivers where the majority of the code is hardware
specific (ports folder), testing on
real hardware is important. It’s preferable to have a hardware
independent test suite with stubbed interfaces for drivers without any
port specific code, and having an example application in
examples to test on real hardware.