Je suis à la recherche de la meilleure façon d'écrire un test unitaire pour du code POST sur un service Web externe. Le corps de la requête POST est un document XML qui décrit les actions et les données à exécuter par le service Web. Maintenant, j'ai enveloppé le webservice dans sa propre classe (semblable à ActiveResource), et je ne peux pas voir moyen de tester le XML exact généré par la classe sans casser l'encapsulation en exposant une partie du XML interne génération en tant que méthodes publiques sur la classe. Cela semble être une odeur de code - du point de vue des utilisateurs de la classe, ils ne devraient pas savoir, ni se soucier, comment la classe implémente réellement l'appel de service Web, que ce soit avec XML, JSON ou pigeons voyageurs.Comment tester le code XML envoyé à un service Web dans Ruby/Rails
Pour un exemple de la classe:
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
Je veux être en mesure de tester le code XML généré pour vous assurer qu'il est conforme à ce que les spécifications pour le service Web attendent. Alors, est-ce que je peux le faire mieux, sans faire de to_xml une méthode publique?
Vous pouvez utiliser send pour appeler des méthodes privées dans Ruby 1.8, mais pas 1.9. C'est encore un hack - je veux tester contre les interfaces (le Ruby, et le service web), pas leur implémentation interne - si je change la façon dont je génère mon XML en classe, je ne devrais pas avoir à changer mes tests. –