 			}
 		}
 		
-		protected static function runMethodForTest(method:Function, test:Object, testMethodName:String, result:FreeTestResult):void {
-			try {
-				method();
-			}
-			catch (error:Error) {
-				result.addFailure(new FreeTestFailure(test, testMethodName, error));
-			}
+		protected function recordFailure(error:Error):void {
+			result.addFailure(new FreeTestFailure(currentTest, currentMethodName, error));
 		}
 		
 		protected function onCompleted():void {

			if (currentTest.hasOwnProperty('setUp'))
				currentTest.setUp();
			
			runMethodForTest(method, currentTest, currentMethodName, result);
			
			var commands:Array = Async.instance.getCommandsForTest(currentTest);
			if (commands && commands.length) {

		
		protected function onAsyncMethodCalled(e:Event):void {
			var command:TimeoutCommand = TimeoutCommand(e.currentTarget);
			try {
				command.execute();
			}
			catch (error:Error) {
				recordFailure(error);
			}
			onAsyncMethodCompleted(e);
		}
		
