diff --git a/scripts/run-tests.sh b/scripts/run-tests.sh
index 9078168..4caa9cc 100755
--- a/scripts/run-tests.sh
+++ b/scripts/run-tests.sh
@@ -78,7 +78,7 @@ simpletest_script_reporter_init();
 $test_id = db_insert('simpletest_test_id')->useDefaults(array('test_id'))->execute();
 
 // Execute tests.
-simpletest_script_execute_batch($test_id, simpletest_script_get_test_list());
+simpletest_script_execute_batch($test_id, $test_list);
 
 // Retrieve the last database prefix used for testing and the last test class
 // that was run from. Use the information to read the lgo file in case any
@@ -138,6 +138,8 @@ All arguments are long options.
   --all       Run all available tests.
 
   --class     Run tests identified by specific class names, instead of group names.
+              A specific test method can be added, for example,
+              'UserAccountLinksUnitTests::testDisabledAccountLink'.
 
   --file      Run tests identified by specific file names, instead of group names.
               Specify the path and the extension (i.e. 'modules/user/user.test').
@@ -364,8 +366,17 @@ function simpletest_script_run_one_test($test_id, $test_class) {
 
     simpletest_classloader_register();
 
-    $test = new $test_class($test_id);
-    $test->run();
+    if (strpos($test_class, '::') > 0) {
+      list($class_name, $method) = explode('::', $test_class, 2);
+      $methods = array($method);
+    }
+    else {
+      $class_name = $test_class;
+      // Use empty array to run all the test methods.
+      $methods = array();
+    }
+    $test = new $class_name($test_id);
+    $test->run($methods);
     $info = $test->getInfo();
 
     $had_fails = (isset($test->results['#fail']) && $test->results['#fail'] > 0);
@@ -421,8 +432,16 @@ function simpletest_script_get_test_list() {
       // Check for valid class names.
       $test_list = array();
       foreach ($args['test_names'] as $test_class) {
-        if (class_exists($test_class)) {
-          $test_list[] = $test_class;
+        list($class_name, $method) = explode('::', $test_class, 2);
+        if (class_exists($class_name)) {
+          if (method_exists($class_name, $method)) {
+            $test_list[] = $test_class;
+          } else {
+            $all_methods = get_class_methods($class_name);
+            simpletest_script_print_error('Test method not found: ' . $test_class);
+            simpletest_script_print_alternatives($method, $all_methods, 6);
+            exit(1);
+          }
         }
         else {
           $groups = simpletest_test_get_all();
@@ -430,8 +449,8 @@ function simpletest_script_get_test_list() {
           foreach ($groups as $group) {
             $all_classes = array_merge($all_classes, array_keys($group));
           }
-          simpletest_script_print_error('Test class not found: ' . $test_class);
-          simpletest_script_print_alternatives($test_class, $all_classes, 6);
+          simpletest_script_print_error('Test class not found: ' . $class_name);
+          simpletest_script_print_alternatives($class_name, $all_classes, 6);
           exit(1);
         }
       }
@@ -497,7 +516,12 @@ function simpletest_script_reporter_init() {
   else {
     echo "Tests to be run:\n";
     foreach ($test_list as $class_name) {
-      $info = call_user_func(array($class_name, 'getInfo'));
+      if (strpos($class_name, '::') > 0) {
+        list($test_class, $method) = explode('::', $class_name, 2);
+        $info = call_user_func(array($test_class, 'getInfo'));
+      } else {
+        $info = call_user_func(array($class_name, 'getInfo'));
+      }
       echo " - " . $info['name'] . ' (' . $class_name . ')' . "\n";
     }
     echo "\n";
