  Critical embedded systems (CES) have become ubiquitous in whether medical,
automotive, or industrial. Software failures in such systems are potentially
disastrous and could lead to serious consequences not only financially but also
life-threatening. However, besides their omnipresence, CES complexity have
grown to extreme measures, faced with this increase, manufacturers and
suppliers are increasingly interested in effective methods of testing logical
correctness and verifying that software parts are error-free.Software testing
is a collection of methods used to detect and correct bugs and faults found in
software code. The first stage of software testing is unit testing, a widely
used technique where individual units of source code are isolated, often
divided up into classes and functions, and tested separately to aid in the
verification of the behavior and functionality of the system. In this chapter,
an overview of GoogleTest (GTest), a xUnit C++ testing framework will be
performed, and a comparison of different available unit test frameworks for use
in the C++ language. On account of the complexity provided by critical embedded
systems, it is difficult to isolate and test the system's behavior, mocking
techniques were considered to enable a real implementation to be replaced with
a fake implementation, the replacement allowed to overcome the challenges
related to hardware dependencies and external factors. Further, this chapter
describes GoogleMock, a part of GoogleTest C++ testing framework that makes the
tests run in isolation.
