Expanding tests with own methods

I want to call the method 'url_for' in my functional test.
e.g. assert_select "a[href=?]", url_for(:action => :new), :text => 'Neue
Seite'

The book I am reading suggests doing this:

class PagesControllerTest < ActionController::TestCase
def setup
  def self.url_for(options, *parameters_for_method_reference)
     options.merge! :only_path => true
     @controller.url_for(options, *parameters_for_method_reference)
  end
end
...
end

Why is it necessary to define 'url_for' within the definition of the
'setup' method?

Why is it necessary to define 'url_for' using self?

All of my tests run just fine if I define url_for as a normal instance
method:

class PagesControllerTest < ActionController::TestCase
def url_for(options, *parameters_for_method_reference)
  options.merge! :only_path => true
  @controller.url_for(options, *parameters_for_method_reference)
end
def test_create_link_in_index
  get :index
  assert_select "a[href=?]", url_for(:action => :new), :text => 'Neue
Seite'
end
...
end

Thanks in advance.