diff --git a/packages/path_provider/path_provider/example/integration_test/path_provider_test.dart b/packages/path_provider/path_provider/example/integration_test/path_provider_test.dart
index 4f5a187..6b3dd65 100644
--- a/packages/path_provider/path_provider/example/integration_test/path_provider_test.dart
+++ b/packages/path_provider/path_provider/example/integration_test/path_provider_test.dart
@@ -70,7 +70,8 @@
   ];
 
   for (final StorageDirectory? type in _allDirs) {
-    test('getExternalStorageDirectories (type: $type)', () async {
+    testWidgets('getExternalStorageDirectories (type: $type)',
+        (WidgetTester tester) async {
       if (Platform.isIOS) {
         final Future<List<Directory>?> result =
             getExternalStorageDirectories(type: null);
diff --git a/packages/path_provider/path_provider_android/example/integration_test/path_provider_test.dart b/packages/path_provider/path_provider_android/example/integration_test/path_provider_test.dart
index 426b07a..0538738 100644
--- a/packages/path_provider/path_provider_android/example/integration_test/path_provider_test.dart
+++ b/packages/path_provider/path_provider_android/example/integration_test/path_provider_test.dart
@@ -61,7 +61,8 @@
   ];
 
   for (final StorageDirectory? type in _allDirs) {
-    test('getExternalStorageDirectories (type: $type)', () async {
+    testWidgets('getExternalStorageDirectories (type: $type)',
+        (WidgetTester tester) async {
       final PathProviderPlatform provider = PathProviderPlatform.instance;
 
       final List<String>? directories =
diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md
index adc7bfc..36d8d23 100644
--- a/script/tool/CHANGELOG.md
+++ b/script/tool/CHANGELOG.md
@@ -1,6 +1,8 @@
 ## NEXT
 
 - Supports empty custom analysis allow list files.
+- `drive-examples` now validates files to ensure that they don't accidentally
+  use `test(...)`.
 
 ## 0.8.6
 
diff --git a/script/tool/lib/src/drive_examples_command.dart b/script/tool/lib/src/drive_examples_command.dart
index 15366e1..45e20c0 100644
--- a/script/tool/lib/src/drive_examples_command.dart
+++ b/script/tool/lib/src/drive_examples_command.dart
@@ -182,7 +182,16 @@
         if (legacyTestFile != null) {
           testTargets.add(legacyTestFile);
         } else {
-          (await _getIntegrationTests(example)).forEach(testTargets.add);
+          for (final File testFile in await _getIntegrationTests(example)) {
+            // Check files for known problematic patterns.
+            final bool passesValidation = _validateIntegrationTest(testFile);
+            if (!passesValidation) {
+              // Report the issue, but continue with the test as the validation
+              // errors don't prevent running.
+              errors.add('${testFile.basename} failed validation');
+            }
+            testTargets.add(testFile);
+          }
         }
 
         if (testTargets.isEmpty) {
@@ -310,6 +319,25 @@
     return tests;
   }
 
+  /// Checks [testFile] for known bad patterns in integration tests, logging
+  /// any issues.
+  ///
+  /// Returns true if the file passes validation without issues.
+  bool _validateIntegrationTest(File testFile) {
+    final List<String> lines = testFile.readAsLinesSync();
+
+    final RegExp badTestPattern = RegExp(r'\s*test\(');
+    if (lines.any((String line) => line.startsWith(badTestPattern))) {
+      final String filename = testFile.basename;
+      printError(
+          '$filename uses "test", which will not report failures correctly. '
+          'Use testWidgets instead.');
+      return false;
+    }
+
+    return true;
+  }
+
   /// For each file in [targets], uses
   /// `flutter drive --driver [driver] --target <target>`
   /// to drive [example], returning a list of any failing test targets.
diff --git a/script/tool/test/drive_examples_command_test.dart b/script/tool/test/drive_examples_command_test.dart
index 23318f7..0b60820 100644
--- a/script/tool/test/drive_examples_command_test.dart
+++ b/script/tool/test/drive_examples_command_test.dart
@@ -307,6 +307,47 @@
       );
     });
 
+    test('integration tests using test(...) fail validation', () async {
+      setMockFlutterDevicesOutput();
+      final RepositoryPackage package = createFakePlugin(
+        'plugin',
+        packagesDir,
+        extraFiles: <String>[
+          'example/test_driver/integration_test.dart',
+          'example/integration_test/foo_test.dart',
+          'example/android/android.java',
+        ],
+        platformSupport: <String, PlatformDetails>{
+          platformAndroid: const PlatformDetails(PlatformSupport.inline),
+          platformIOS: const PlatformDetails(PlatformSupport.inline),
+        },
+      );
+      package.directory
+          .childDirectory('example')
+          .childDirectory('integration_test')
+          .childFile('foo_test.dart')
+          .writeAsStringSync('''
+   test('this is the wrong kind of test!'), () {
+     ...
+   }
+''');
+
+      Error? commandError;
+      final List<String> output = await runCapturingPrint(
+          runner, <String>['drive-examples', '--android'],
+          errorHandler: (Error e) {
+        commandError = e;
+      });
+
+      expect(commandError, isA<ToolExit>());
+      expect(
+        output,
+        containsAllInOrder(<Matcher>[
+          contains('foo_test.dart failed validation'),
+        ]),
+      );
+    });
+
     test(
         'driving under folder "test_driver" when targets are under "integration_test"',
         () async {
