2 Stimmen

Mocking einer externen API

Ich bin neu in Teststrategien und Mocking, und ich habe eine harte Zeit herauszufinden, wie man einen Aufruf an einen externen Dienst zu spotten. Ich bin sicher, es ist etwas einfach, ich bin fehlt, ich weiß nur nicht, was genau.

Ich verwende das Braintree-Gem, um für Abonnementdienste über das Braintree-Gateway aufzuladen, und ich wollte die Customer create-Methode und Subscription create-Methode in meinem UserController's create-Methode mocken.

Eine Methode Customer.create sieht etwa so aus:

  result = Braintree::Customer.create(
    :first_name => @creditcard.first_name,
    :last_name => @creditcard.last_name,
    :email => @user.email
    :credit_card => {
      ...
      }
    }
  )

Dies gibt ein Braintree::Successful-Ergebnisobjekt mit den Attributen des verarbeiteten Ergebnisses zurück.

Ich denke, ich muss etwas tun wie:

Braintree::Customer.expects(:create).returns(...)

Aber was kommt in den Retourenbereich? Muss ich mein eigenes erfolgreiches Objekt mit den Attributen eines gefälschten verarbeiteten Ergebnisses erstellen, oder gibt es einen einfacheren Weg, all das zu tun?

Danke für jede Hilfe, die Sie anbieten können.

2voto

szeryf Punkte 3028

Sie können eine OpenStruct wie in dem Kommentar vorgeschlagen oder eine stub o mock , was IMHO besser und nützlicher für Tests ist, weil man einfach Erwartungen setzen kann, etwa so:

Braintree::Customer.expects(:create).returns(mock(:save => true))

Der zurückgegebene Mock erwartet die save Nachricht (die in diesem Fall vielleicht keinen Sinn ergibt, aber Ihnen die Idee vermitteln soll).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X