diff --git a/tools_webrtc/mb/mb.py b/tools_webrtc/mb/mb.py
index 682532e..4db1bc3 100755
--- a/tools_webrtc/mb/mb.py
+++ b/tools_webrtc/mb/mb.py
@@ -1042,7 +1042,7 @@
       self.WriteFailureAndRaise('We should not be isolating %s.' % target,
                                 output_path=None)
     if test_type not in ('console_test_launcher', 'windowed_test_launcher',
-                         'non_parallel_console_test_launcher',
+                         'non_parallel_console_test_launcher', 'raw',
                          'additional_compile_target', 'junit_test', 'script'):
       self.WriteFailureAndRaise('No command line for %s found (test type %s).'
                                 % (target, test_type), output_path=None)
@@ -1071,21 +1071,23 @@
             '../../testing/xvfb.py',
         ]
 
-      # Memcheck is only supported for linux. Ignore in other platforms.
-      memcheck = is_linux and 'rtc_use_memcheck=true' in vals['gn_args']
-      memcheck_cmdline = [
-          'bash',
-          '../../tools_webrtc/valgrind/webrtc_tests.sh',
-          '--tool',
-          'memcheck',
-          '--target',
-          'Release',
-          '--build-dir',
-          '..',
-          '--test',
-      ]
+      cmdline = (['../../testing/xvfb.py'] if xvfb else
+                 ['../../testing/test_env.py'])
 
-      if not memcheck:
+      # Memcheck is only supported for linux. Ignore in other platforms.
+      if is_linux and 'rtc_use_memcheck=true' in vals['gn_args']:
+        cmdline += [
+            'bash',
+            '../../tools_webrtc/valgrind/webrtc_tests.sh',
+            '--tool',
+            'memcheck',
+            '--target',
+            'Release',
+            '--build-dir',
+            '..',
+            '--test',
+        ]
+      elif test_type != 'raw':
         extra_files += [
             '../../third_party/gtest-parallel/gtest-parallel',
             '../../third_party/gtest-parallel/gtest_parallel.py',
@@ -1094,7 +1096,7 @@
         sep = '\\' if self.platform == 'win32' else '/'
         output_dir = '${ISOLATED_OUTDIR}' + sep + 'test_logs'
         timeout = isolate_map[target].get('timeout', 900)
-        gtest_parallel_wrapper = [
+        cmdline += [
             '../../tools_webrtc/gtest-parallel-wrapper.py',
             '--output_dir=%s' % output_dir,
             '--gtest_color=no',
@@ -1104,27 +1106,25 @@
             '--timeout=%s' % timeout,
             '--retry_failed=3',
         ]
+        if test_type == 'non_parallel_console_test_launcher':
+          # Still use the gtest-parallel-wrapper.py script since we need it to
+          # run tests on swarming, but don't execute tests in parallel.
+          cmdline.append('--workers=1')
+
+      executable_prefix = '.\\' if self.platform == 'win32' else './'
+      executable_suffix = '.exe' if self.platform == 'win32' else ''
+      executable = executable_prefix + target + executable_suffix
+
+      cmdline.append(executable)
+      if test_type != 'raw':
+        cmdline.append('--')
 
       asan = 'is_asan=true' in vals['gn_args']
       lsan = 'is_lsan=true' in vals['gn_args']
       msan = 'is_msan=true' in vals['gn_args']
       tsan = 'is_tsan=true' in vals['gn_args']
 
-      executable_prefix = '.\\' if self.platform == 'win32' else './'
-      executable_suffix = '.exe' if self.platform == 'win32' else ''
-      executable = executable_prefix + target + executable_suffix
-
-      cmdline = (['../../testing/xvfb.py'] if xvfb else
-                 ['../../testing/test_env.py'])
-      cmdline += memcheck_cmdline if memcheck else gtest_parallel_wrapper
-      cmdline.append(executable)
-      if test_type == 'non_parallel_console_test_launcher' and not memcheck:
-        # Still use the gtest-parallel-wrapper.py script since we need it to
-        # run tests on swarming, but don't execute tests in parallel.
-        cmdline.append('--workers=1')
-
       cmdline.extend([
-          '--',
           '--asan=%d' % asan,
           '--lsan=%d' % lsan,
           '--msan=%d' % msan,
diff --git a/tools_webrtc/mb/mb_unittest.py b/tools_webrtc/mb/mb_unittest.py
index dd47531..7c1f1e6 100755
--- a/tools_webrtc/mb/mb_unittest.py
+++ b/tools_webrtc/mb/mb_unittest.py
@@ -457,8 +457,8 @@
         '--gtest_color=no',
         '--timeout=500',
         '--retry_failed=3',
-        './base_unittests',
         '--workers=1',
+        './base_unittests',
         '--',
         '--asan=0',
         '--lsan=0',
@@ -501,6 +501,43 @@
         '../../base/base_unittests_script.py',
     ])
 
+  def test_gn_gen_raw(self):
+    test_files = {
+      '/tmp/swarming_targets': 'base_unittests\n',
+      '/fake_src/testing/buildbot/gn_isolate_map.pyl': (
+          "{'base_unittests': {"
+          "  'label': '//base:base_unittests',"
+          "  'type': 'raw',"
+          "}}\n"
+      ),
+      '/fake_src/out/Default/base_unittests.runtime_deps': (
+          "base_unittests\n"
+      ),
+    }
+    mbw = self.check(['gen', '-c', 'gn_debug_goma', '//out/Default',
+                      '--swarming-targets-file', '/tmp/swarming_targets',
+                      '--isolate-map-file',
+                      '/fake_src/testing/buildbot/gn_isolate_map.pyl'],
+                     files=test_files, ret=0)
+
+    isolate_file = mbw.files['/fake_src/out/Default/base_unittests.isolate']
+    isolate_file_contents = ast.literal_eval(isolate_file)
+    files = isolate_file_contents['variables']['files']
+    command = isolate_file_contents['variables']['command']
+
+    self.assertEqual(files, [
+        '../../testing/test_env.py',
+        'base_unittests',
+    ])
+    self.assertEqual(command, [
+        '../../testing/test_env.py',
+        './base_unittests',
+        '--asan=0',
+        '--lsan=0',
+        '--msan=0',
+        '--tsan=0',
+    ])
+
   def test_gn_gen_non_parallel_console_test_launcher(self):
     test_files = {
       '/tmp/swarming_targets': 'base_unittests\n',
@@ -539,8 +576,8 @@
         '--gtest_color=no',
         '--timeout=900',
         '--retry_failed=3',
-        './base_unittests',
         '--workers=1',
+        './base_unittests',
         '--',
         '--asan=0',
         '--lsan=0',
