def process(action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
      
      
      %w(@controller @request @response).each do |iv_name|
        if !(instance_variable_names.include?(iv_name) || instance_variable_names.include?(iv_name.to_sym)) || instance_variable_get(iv_name).nil?
          raise "#{iv_name} is nil: make sure you set it in your test's setup method."
        end
      end
      @request.recycle!
      @response.recycle!
      @html_document = nil
      @request.env['REQUEST_METHOD'] = http_method
      @request.action = action.to_s
      parameters ||= {}
      @request.assign_parameters(@controller.class.controller_path, action.to_s, parameters)
      @request.session = ActionController::TestSession.new(session) unless session.nil?
      @request.session["flash"] = ActionController::Flash::FlashHash.new.update(flash) if flash
      build_request_uri(action, parameters)
      Base.class_eval { include ProcessWithTest } unless Base < ProcessWithTest
      @controller.process_with_test(@request, @response)
    end