anchor.diff:    }
   }
   
  -@reflectiveTest
  -class _MigrationCliTest {
  +abstract class _MigrationCliTestBase {
  +  void set logger(_TestLogger logger);
  +
  +  MemoryResourceProvider get resourceProvider;
  +}
  +
  +mixin _MigrationCliTestMethods on _MigrationCliTestBase {
  +  @override
     /*late*/ _TestLogger logger;
   
     final hasVerboseHelpMessage = contains('for verbose help output');
   
     final hasUsageText = contains('Usage: nnbd_migration');
  -
  -  final resourceProvider = MemoryResourceProvider();
   
     String assertErrorExit(MigrationCli cli) {
       expect(cli.exitCode, isNotNull);
  
positive.code:   }
  }
  
  /// TODO(paulberry): move into cli_util
  class _TestLogger implements Logger {
    final stderrBuffer = StringBuffer();
  
negative.code: 
  main() {
    defineReflectiveSuite(() {
      defineReflectiveTests(_MigrationCliTestPosix);
      defineReflectiveTests(_MigrationCliTestWindows);
    });
  }
  
  class _MigrationCli extends MigrationCli {
    Future<void> Function() _runWhilePreviewServerActive;
  
    _MigrationCli(_MigrationCliTestBase test)
        : super(
              binaryName: 'nnbd_migration',
              loggerFactory: (isVerbose) => test.logger = _TestLogger(isVerbose),
  