Run version unit tests in isolation and assert on error logs

Use JUnit Jupiter's @Isolated, because redirecting System.err is not
thread-safe. If we have no logging framework with per-class log levels
and the option to use in-memory loggers in place, the only way we can
silence the test from logging stack traces and warnings to System.err is
to redirect it to an in-memory stream and assert on its contents for
verification.

I do not like this solution, but for the time being it is viable, albeit
suboptimal.
3 files changed