2

認証済み RESTful API の Python ラッパーを作成しています。私は今、テスト スイートを作成しています (これも初めてのテスト ライターです) が、いくつか質問があります。

1.a) どうすれば呼び出しを行うことができますが、資格情報をテストにハードコードする必要はありません。Github に投げるからです。

1.b) あざけることについてはある程度知っていますが、その方法がわかりません。これにより、実際のサービスを呼び出す必要がなくなりますか? これについて最善の方法は何ですか?

2)何をテストしますか-メソッドが辞書内の特定のアイテムを渡していることを確認してください。

3) ここで従うべきベストプラクティスはありますか?

4

1 に答える 1

5

TJ さん、あなたが書いている 1 つの関数の例 (テスト コードではなく、テスト対象のコード) を見せていただければ、テストの例を示します。

一般的には:

1.a 外部 API への呼び出しをモックします。認証メカニズムまたはインターネット接続が機能しているかどうかをテストしようとしているわけではありません。正しい署名で API を呼び出していることをテストしようとしているだけです。

1.b Python でのモックは比較的単純です。私は通常、Michael Foord によって書かれたモッキング ライブラリを使用します。pip install mock始めましょう。次に、次のようなことができます

import unittest
from mock import call, patch
from my_module import wrapper_func

class ExternalApiTest(unittest.TestCase):

    @patch('my_module.api_func')
    def test_external_api_call(self, mocked_api_func): 

        response = wrapper_func('user', 'pass')

        self.assertTrue(mocked_api_func.called)
        self.assertEqual(
            mocked_api_func.call_args_list,
            [call('user', 'pass')]
        )
        self.assertEqual(mocked_api_func.return_value, response)

この例では、api_func内部my_moduleをモック オブジェクトに置き換えています。モック オブジェクトは、それに対して何が行われたかを記録します。パッチを適用する場所を覚えておくことが重要です。オブジェクトをインポートした場所にパッチを適用しません。使用する場所にパッチを適用します。

  1. コードが与えられた入力に対して正しいことを行っていることをテストします。純粋関数 (関数型プログラミングの意味で純粋) のテストは非常に簡単です。入力 a が与えられると、この関数は出力 b を返すと主張します。関数に多くの副作用がある場合は、少し複雑になります。

  2. 特定の機能/メソッドをテストするのが難しすぎる、または複雑すぎると感じた場合、それはコードの一部が正しく記述されていないことを意味している可能性があります。オブジェクトを関数に渡すのではなく、可能であればプリミティブを渡すようにして、テスト可能なチャンクに分割してみてください。

于 2012-11-04T11:18:50.677 に答える