Test runner: avoid using sys.exit in main()