The µTest++ Testing Framework history
February 2021 (v1.1)
In February 2021, the initial experimental version was developed, drawing inspiration from node-tap and prioritising maximum simplicity.
March 2021 (v2.0)
During March 2021, as part of a broader project restructuring, the C++ namespace was renamed to micro_os_plus.
April 2022 (v3.0)
At the beginning of 2022, a significant reworking of the library commenced, with the objective of enhancing flexibility and supporting multiple test suites. The principal source of inspiration for this revision was Boost UT. The revision required C++20, which consequently raised the minimum C++ standard of the entire µOS++ project. The v3.x release was subsequently published in April 2022.
March 2026 (v3.3)
In March 2026, a dedicated TAP reporter was added, producing output compliant with the TAP 14 specification.
April 2026 (v4.0)
In March 2026, following extensive experience with node-tap, a major rework was undertaken to better align µTest++ with the node-tap model. The internal static objects were replaced by a hierarchy of explicit objects that pass references down the call chain from the runner to the individual checks, and the TAP reporter became the default. The v4.0 release was published in April 2026.
May 2026 (v4.1)
The name of the top suite, previously passed to the runner constructor, became
optional, and defaults to the name of the program. The definitions were split
from the declarations, and the internal classes were moved to the detail
namespace.
July 2026 (v5.0)
The v5.0 release changed the configuration and the build integration, but not
the C++ API. The CMake and meson files are now generated from a single
description of the package, xcdl-package.jsonc, in preparation for the xCDL
configuration tool, which will generate the configuration from the same
description. For this, the configuration macros had to follow a single naming
scheme, with the _ENABLED suffix, and the configuration had to be in a header
file included automatically, micro-os-plus/micro-test-plus-defines.h.
October 2026 (v6.0)
After v5.0.1, the C++ API and the implementation were reviewed systematically, in successive reviews, from 12 October 2026. Each review read the code without its comments, and confirmed the suspected defects with small test programs. The reviews found defects that made tests behave wrongly, for example a nested test case that aborted the program, an exception that escaped a test case and ended the run, integers of different signedness compared by conversion, and TAP output that was not valid TAP. They also found design weaknesses: classes whose internal state was public, two places that parsed the command line with different policies, a library that terminated the process in many places, and names that were inconsistent. The findings were registered as GitHub issues, assigned to the 6.0.0 milestone.
The result is the most extensive rework of the library since v4.0, which also simplified the API, by hiding the internals of the library classes and removing the redundant ways of writing the same check:
- the runner is configured with a
runner_optionsobject, which owns its strings and parses the command line, and the top suite is added explicitly, withadd_top_suite(), so that a test program can run without a command line and without a top suite; - the test hierarchy is protected: the constructors and the internal state of
the suites and of the test cases are no longer public, an exception that
escapes a test case or a suite is reported as a failed check, and a failed
require()stops only its test case; - the checks report their operands in a uniform way, with function comparators
that replace the overloaded operators, the literals, and the type wrappers,
which are now deprecated, and with an
extensionnamespace, through which the applications write comparators that report their operands as the built-in ones; - the reports follow the TAP 14 specification, with escaped names, valid plans, and diagnostics fields as in node-tap, and the human-readable report file is always complete;
- new features were added, such as
test_each(), the--filter,--colour,--list-tests, and--helpoptions, andall_of(),any_of(),negate(), andapprox().
The deprecated definitions remain available when
MICRO_OS_PLUS_MICRO_TEST_PLUS_DEPRECATED_ENABLED is defined, so that existing
applications can be migrated step by step. The changes that cannot be hidden
behind deprecated aliases are described in the
compatibility notices and, in
detail, in the release post.