2016-06-13 15 views
0

私は、SalesforceIQ APIを呼び出すコードを書いています。私は今私のコードを単体テストしようとしています(それぞれの関数の単体テストを書く)。私はAPI呼び出しを避けるために何か何かをする必要があるので、これについてどうやって行くべきか少し不明です。Pythonユニットテスト:APIコールの回避

def update_contact(name, phone, address, contact_id): 
    contact = Contact(contact_id) 
    set_contact_fields(contact, name, phone, address) 
    return contact.update() 

contact.update()は、APIの呼び出しです:

は、ここで私がテストしようとしている例機能です。だからを呼び出すことを避けたいと思いますが、update_contactのテストではこれらの3つのフィールド(名前、電話番号、住所)を更新しています。

どのようにこれについて行くためのrecs?

ありがとうございます!

答えて

1

あなたはその方法にパッチを適用するpatch(のpython3でpython2でmock.patchunittest.mock.patch)を使用することができます。

@patch.object(Contact, 'update') 
def test_api_call(self, update): 
    # "update" is the patched method, instace of `MagicMock` 
    update_contact('name', 'phone', 'address', 'contact_id') 
    update.assert_called_once_with() 

Python documentationを。

+0

私はドキュメントを読んでいますが、少し精緻化することができますか?ありがとう! – bclayman

+1

一時的に(テスト期間中)メソッドを 'MagicMock'インスタンスに置き換えます。 'MagicMock'は、自由に操作できるオブジェクトです(例えば、戻り値の設定、例外の発生、プロパティの設定など)、呼び出しを呼び出すことができます。このオブジェクトは、テストするコードがどのように使用されているかを検証できるように、テスト関数の最初の引数として渡されます。 – Anonymous

+0

助けてくれてありがとう。私はあなたの例に完全に従っていません。あなたは 'update_contact'を呼び出してから、その更新が一度呼び出されたと主張しています。しかし、私は更新メソッドを持っていません、私はちょうどupdate_contactメソッドを持っています... – bclayman

0

Contactオブジェクトには__repr__()または__str__()メソッドがありますか?そうでなければ、書きませんか?次に、contactを印刷して、それが何であるかを確認できます。テストをさらに自動化したい場合は、それが返す文字列で何か他の処理を行います。

関連する問題