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
をモック オブジェクトに置き換えています。モック オブジェクトは、それに対して何が行われたかを記録します。パッチを適用する場所を覚えておくことが重要です。オブジェクトをインポートした場所にパッチを適用しません。使用する場所にパッチを適用します。
コードが与えられた入力に対して正しいことを行っていることをテストします。純粋関数 (関数型プログラミングの意味で純粋) のテストは非常に簡単です。入力 a が与えられると、この関数は出力 b を返すと主張します。関数に多くの副作用がある場合は、少し複雑になります。
特定の機能/メソッドをテストするのが難しすぎる、または複雑すぎると感じた場合、それはコードの一部が正しく記述されていないことを意味している可能性があります。オブジェクトを関数に渡すのではなく、可能であればプリミティブを渡すようにして、テスト可能なチャンクに分割してみてください。