diff --git a/test/src/live_process_test.dart b/test/src/live_process_test.dart
index d5f894b..540b5f5 100644
--- a/test/src/live_process_test.dart
+++ b/test/src/live_process_test.dart
@@ -15,7 +15,7 @@
 void main() {
   if (!Platform.isLinux && !Platform.isMacOS) {
     print('Test only available on linux and macOS');
-    exit(-1);
+    return;
   }
 
   late Directory tmpdir;
@@ -49,7 +49,7 @@
       final ProcessRunnerResult result =
           await processRunner.runProcess(<String>['cat', '--flutter'], failOk: true);
       expect(result.exitCode, isNot(equals(0)));
-      expect(result.stderr, contains('unrecognized option'));
+      expect(result.stderr, contains(RegExp(r'(unrecognized|illegal) option')));
     });
     test('runProcess captures detachedWithStdio stdout', () async {
       final ProcessRunnerResult result = await processRunner.runProcess(
@@ -63,7 +63,7 @@
           <String>['cat', '--flutter'],
           failOk: true, startMode: ProcessStartMode.detachedWithStdio);
       expect(result.exitCode, equals(0)); // failed detached processes don't report an exit code.
-      expect(result.stderr, contains('unrecognized option'));
+      expect(result.stderr, contains(RegExp(r'(unrecognized|illegal) option')));
     });
     test('runProcess captures nothing with detached process', () async {
       final ProcessRunnerResult result = await processRunner
diff --git a/test/src/process_pool_test.dart b/test/src/process_pool_test.dart
index ecc5255..8aed900 100644
--- a/test/src/process_pool_test.dart
+++ b/test/src/process_pool_test.dart
@@ -13,12 +13,13 @@
   late FakeProcessManager fakeProcessManager;
   late ProcessRunner processRunner;
   late ProcessPool processPool;
+  final String testPath = Platform.isWindows ? r'C:\tmp\foo' : '/tmp/foo';
 
   setUp(() {
     fakeProcessManager = FakeProcessManager((String value) {});
     processRunner = ProcessRunner(
       processManager: fakeProcessManager,
-      defaultWorkingDirectory: Directory('/tmp/foo'),
+      defaultWorkingDirectory: Directory(testPath),
     );
     processPool = ProcessPool(processRunner: processRunner, printReport: null);
   });
@@ -29,7 +30,7 @@
     test('startWorkers works', () async {
       final Map<FakeInvocationRecord, List<ProcessResult>> calls =
           <FakeInvocationRecord, List<ProcessResult>>{
-        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], '/tmp/foo'): <ProcessResult>[
+        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], testPath): <ProcessResult>[
           ProcessResult(0, 0, 'output1', ''),
         ],
       };
@@ -43,7 +44,7 @@
     test('runToCompletion works', () async {
       final Map<FakeInvocationRecord, List<ProcessResult>> calls =
           <FakeInvocationRecord, List<ProcessResult>>{
-        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], '/tmp/foo'): <ProcessResult>[
+        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], testPath): <ProcessResult>[
           ProcessResult(0, 0, 'output1', ''),
         ],
       };
@@ -57,7 +58,7 @@
     test('failed tests report results', () async {
       final Map<FakeInvocationRecord, List<ProcessResult>> calls =
           <FakeInvocationRecord, List<ProcessResult>>{
-        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], '/tmp/foo'): <ProcessResult>[
+        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], testPath): <ProcessResult>[
           ProcessResult(0, -1, 'output1', 'stderr1'),
         ],
       };
@@ -77,7 +78,7 @@
       processPool = ProcessPool(processRunner: processRunner, printReport: null);
       final Map<FakeInvocationRecord, List<ProcessResult>> calls =
           <FakeInvocationRecord, List<ProcessResult>>{
-        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], '/tmp/foo'): <ProcessResult>[
+        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], testPath): <ProcessResult>[
           ProcessResult(0, -1, 'output1', 'stderr1'),
         ],
       };
diff --git a/test/src/process_runner_test.dart b/test/src/process_runner_test.dart
index 8182b31..c3571de 100644
--- a/test/src/process_runner_test.dart
+++ b/test/src/process_runner_test.dart
@@ -12,11 +12,12 @@
 void main() {
   FakeProcessManager fakeProcessManager = FakeProcessManager((String value) {});
   ProcessRunner processRunner = ProcessRunner(processManager: fakeProcessManager);
+  final String testPath = Platform.isWindows ? r'C:\tmp\foo' : '/tmp/foo';
 
   setUp(() {
     fakeProcessManager = FakeProcessManager((String value) {});
     processRunner = ProcessRunner(
-        processManager: fakeProcessManager, defaultWorkingDirectory: Directory('/tmp/foo'));
+        processManager: fakeProcessManager, defaultWorkingDirectory: Directory(testPath));
   });
 
   tearDown(() {});
@@ -25,7 +26,7 @@
     test('runProcess works', () async {
       final Map<FakeInvocationRecord, List<ProcessResult>> calls =
           <FakeInvocationRecord, List<ProcessResult>>{
-        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], '/tmp/foo'): <ProcessResult>[
+        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], testPath): <ProcessResult>[
           ProcessResult(0, 0, 'output1', ''),
         ],
       };
@@ -36,7 +37,7 @@
     test('runProcess returns correct output', () async {
       final Map<FakeInvocationRecord, List<ProcessResult>> calls =
           <FakeInvocationRecord, List<ProcessResult>>{
-        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], '/tmp/foo'): <ProcessResult>[
+        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], testPath): <ProcessResult>[
           ProcessResult(0, 0, 'output1', 'stderr1'),
         ],
       };
@@ -62,7 +63,7 @@
     test('runProcess returns the failed results properly', () async {
       final Map<FakeInvocationRecord, List<ProcessResult>> calls =
           <FakeInvocationRecord, List<ProcessResult>>{
-        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], '/tmp/foo'): <ProcessResult>[
+        FakeInvocationRecord(<String>['command', 'arg1', 'arg2'], testPath): <ProcessResult>[
           ProcessResult(0, -1, 'output1', 'stderr1'),
         ],
       };
