diff --git a/core/modules/simpletest/drupal_web_test_case.php b/core/modules/simpletest/drupal_web_test_case.php
index 6adaf93..f4ec977 100644
--- a/core/modules/simpletest/drupal_web_test_case.php
+++ b/core/modules/simpletest/drupal_web_test_case.php
@@ -491,17 +491,6 @@ abstract class DrupalTestCase {
     if ($methods) {
       $class_methods = array_intersect($class_methods, $methods);
     }
-    $missing_requirements = $this->checkRequirements();
-    if (!empty($missing_requirements)) {
-      $missing_requirements_object = new ReflectionObject($this);
-      $caller = array(
-        'file' => $missing_requirements_object->getFileName(),
-      );
-      foreach ($missing_requirements as $missing_requirement) {
-        DrupalTestCase::insertAssert($this->testId, $class, FALSE, $missing_requirement, 'Requirements check.', $caller);
-      }
-    }
-    else {
       foreach ($class_methods as $method) {
         // If the current method starts with "test", run it - it's a test.
         if (strtolower(substr($method, 0, 4)) == 'test') {
@@ -514,7 +503,12 @@ abstract class DrupalTestCase {
             'function' => $class . '->' . $method . '()',
           );
           $completion_check_id = DrupalTestCase::insertAssert($this->testId, $class, FALSE, t('The test did not complete due to a fatal error.'), 'Completion check', $caller);
-          $this->setUp();
+          try {
+            $this->setUp();
+          }
+          catch (DrupalTestCaseRequirementsException $e) {
+            $this->fail($e->getMessage(), 'Requirements');
+          }
           if ($this->setup) {
             try {
               $this->$method();
@@ -532,7 +526,6 @@ abstract class DrupalTestCase {
           DrupalTestCase::deleteAssert($completion_check_id);
         }
       }
-    }
     // Clear out the error messages and restore error handler.
     drupal_get_messages();
     restore_error_handler();
@@ -675,6 +668,12 @@ abstract class DrupalTestCase {
   }
 }
 
+class DrupalTestCaseException extends Exception {
+}
+
+class DrupalTestCaseRequirementsException extends DrupalTestCaseException {
+}
+
 /**
  * Test case for Drupal unit tests.
  *
diff --git a/core/modules/simpletest/simpletest.test b/core/modules/simpletest/simpletest.test
index bd4427c..6248fa0 100644
--- a/core/modules/simpletest/simpletest.test
+++ b/core/modules/simpletest/simpletest.test
@@ -571,44 +571,54 @@ class SimpleTestBrokenSetUp extends DrupalWebTestCase {
 /**
  * Tests missing requirements to run test.
  */
-class SimpleTestMissingCheckedRequirements extends DrupalWebTestCase {
+class SimpleTestRequirementsParentTestCase extends DrupalWebTestCase {
+  protected $profile = 'testing';
+
+  function setUp() {
+    if (drupal_valid_test_ua()) {
+      throw new DrupalTestCaseRequirementsException('Unmet requirement here.');
+    }
+    $modules = func_get_args();
+    $modules = is_array($modules[0]) ? $modules[0] : $modules;
+    parent::setUp($modules);
+  }
+}
+
+/**
+ * Tests missing requirements to run test.
+ */
+class SimpleTestRequirementsTestCase extends SimpleTestRequirementsParentTestCase {
+  protected $profile = 'testing';
+
   public static function getInfo() {
     return array(
-      'name' => 'Broken requirements test',
+      'name' => 'Test case requirements',
       'description' => 'Tests a test case with missing requirements.',
       'group' => 'SimpleTest',
     );
   }
 
   function setUp() {
-    parent::setUp('simpletest');
+    parent::setUp(array('simpletest'));
+
     $admin_user = $this->drupalCreateUser(array('administer unit tests'));
     $this->drupalLogin($admin_user);
   }
 
   /**
-   * Overrides checkRequirements().
-   */
-  protected function checkRequirements() {
-    if (drupal_valid_test_ua()) {
-      return array(
-        'Test is not allowed to run.'
-      );
-    }
-    return parent::checkRequirements();
-  }
-
-  /**
    * Ensures test will not run when requirements are missing.
    */
-  protected function testCheckRequirements() {
+  protected function testUnmetRequirements() {
     // If this is the main request, run the web test script and then assert
     // that the child tests did not run.
     if (!drupal_valid_test_ua()) {
       // Run this test from web interface.
-      $edit['SimpleTestMissingCheckedRequirements'] = TRUE;
+      $edit['SimpleTestRequirementsTestCase'] = TRUE;
       $this->drupalPost('admin/config/development/testing', $edit, t('Run tests'));
-      $this->assertRaw('Test is not allowed to run.', 'Test check for requirements came up.');
+      // @see SimpleTestRequirementsParentTestCase::setUp()
+      $this->assertText('Unmet requirement here.');
+
+      // Verify that enforced failure below was not executed.
       $this->assertNoText('Test ran when it failed requirements check.', 'Test requirements stopped test from running.');
     }
     else {
