The user needs to understand what tests passed, what didn't run, and what failed (and why).

The `make test` output makes this pretty clear:

```
TEST      lib.hardware.pci
TEST      lib.hardware.bus
TEST      lib.hardware.vfio
TEST      apps.intel.intel_app
SKIPPED   testlog/apps.intel.intel_app
TEST      apps.vhost.vhost_user
SKIPPED   testlog/apps.vhost.vhost_user
TEST      apps.vhost.vhost_apps
SKIPPED   testlog/apps.vhost.vhost_apps
TEST      apps.example.asm
TEST      apps.rate_limiter.rate_limiter
TEST      apps.packet_filter.packet_filter
TEST      apps.packet_filter.packet_filter_benchmark
TEST      apps.ipv6.ipv6
TEST      core.lib
TEST      core.timer
TEST      core.app
TEST      core.memory
TEST      core.link
```

The new test framework needs to be able to communicate the same basic information to the user i.e. so that they don't think they have tested more than they really did.