Как проверить XML, отправленный веб-сервису в Ruby / Rails - PullRequest
0 голосов
/ 03 июня 2010

Я ищу лучший способ написания модульного теста для кода, который отправляет POST во внешний веб-сервис. Тело запроса POST представляет собой XML-документ, описывающий действия и данные, которые должен выполнить веб-сервис.

Теперь я обернул веб-сервис в его собственный класс (похожий на ActiveResource), и я не вижу никакого способа проверить точный XML, сгенерированный классом, не нарушая инкапсуляцию, раскрывая некоторые из внутренних генераций XML как публичные методы в классе. Кажется, что это запах кода - с точки зрения пользователей класса, они не должны знать и не заботиться о том, как класс на самом деле реализует вызов веб-службы, будь то с помощью XML, JSON или почтовых голубей.

Для примера класса:

class Resource
  def new
    #initialize the class
  end

  def save!
    Http.post("http://webservice.com", self.to_xml)
  end

  private
  def to_xml
    # returns an XML representation of self
  end
end

Я хочу иметь возможность протестировать сгенерированный XML-файл, чтобы убедиться, что он соответствует требованиям веб-службы. Так можно ли лучше всего это сделать, не делая to_xml публичным методом?

Ответы [ 2 ]

1 голос
/ 03 июня 2010

Вместо вызова частного метода вы можете отправить сообщение:

myobject.send(:method_name, args)

Это должно избежать проблем с доступом к приватному методу. Возможно, более элегантно, если вы используете rSpec, вы можете сделать это:

before(:each) do
  MyClass.send(:public, *MyClass.protected_instance_methods)  
end

и тогда в ваших тестах вы можете вызывать метод нормально.

0 голосов
/ 03 июня 2010

Проверьте Netrecorder (http://github.com/chrisyoung/netrecorder) или Fakeweb (http://github.com/chrisk/fakeweb).

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...