diff --git a/lib/internal/test_runner/runner.js b/lib/internal/test_runner/runner.js
index 08f9b48dda10d3..68efa81614b7aa 100644
--- a/lib/internal/test_runner/runner.js
+++ b/lib/internal/test_runner/runner.js
@@ -423,10 +423,9 @@ function watchFiles(testFiles, opts) {
   return filesWatcher;
 }
 
-function run(options) {
-  if (options === null || typeof options !== 'object') {
-    options = kEmptyObject;
-  }
+function run(options = kEmptyObject) {
+  validateObject(options, 'options');
+
   let { testNamePatterns, shard } = options;
   const { concurrency, timeout, signal, files, inspectPort, watch, setup, only } = options;
 
diff --git a/test/parallel/test-runner-run.mjs b/test/parallel/test-runner-run.mjs
index 02fed7a3659162..3201da25f87a1d 100644
--- a/test/parallel/test-runner-run.mjs
+++ b/test/parallel/test-runner-run.mjs
@@ -8,7 +8,6 @@ import assert from 'node:assert';
 const testFixtures = fixtures.path('test-runner');
 
 describe('require(\'node:test\').run', { concurrency: true }, () => {
-
   it('should run with no tests', async () => {
     const stream = run({ files: [] });
     stream.on('test:fail', common.mustNotCall());
@@ -65,13 +64,6 @@ describe('require(\'node:test\').run', { concurrency: true }, () => {
     for await (const _ of stream);
   });
 
-  it('should validate files', async () => {
-    [Symbol(), {}, () => {}, 0, 1, 0n, 1n, '', '1', Promise.resolve([]), true, false]
-      .forEach((files) => assert.throws(() => run({ files }), {
-        code: 'ERR_INVALID_ARG_TYPE'
-      }));
-  });
-
   it('should be piped with dot', async () => {
     const result = await run({
       files: [join(testFixtures, 'default-behavior/test/random.cjs')]
@@ -437,4 +429,20 @@ describe('require(\'node:test\').run', { concurrency: true }, () => {
       assert.deepStrictEqual(executedTestFiles.sort(), [...shardsTestsFiles].sort());
     });
   });
+
+  describe('validation', () => {
+    it('should only allow array in options.files', async () => {
+      [Symbol(), {}, () => {}, 0, 1, 0n, 1n, '', '1', Promise.resolve([]), true, false]
+        .forEach((files) => assert.throws(() => run({ files }), {
+          code: 'ERR_INVALID_ARG_TYPE'
+        }));
+    });
+
+    it('should only allow object as options', () => {
+      [Symbol(), [], () => {}, 0, 1, 0n, 1n, '', '1', true, false]
+        .forEach((options) => assert.throws(() => run(options), {
+          code: 'ERR_INVALID_ARG_TYPE'
+        }));
+    });
+  });
 });