私のpythonコードでは、パラメータの1つのタイプをチェックして、それが期待するタイプであることを確認しています。例えば:
def myfunction(dbConnection):
if (type(dbConnection)<>bpgsql.Connection):
r['error'] += ' invalid database connection'
テスト目的でモック接続を渡したい。モック オブジェクトを正しい型のふりをさせる方法はありますか?
私のpythonコードでは、パラメータの1つのタイプをチェックして、それが期待するタイプであることを確認しています。例えば:
def myfunction(dbConnection):
if (type(dbConnection)<>bpgsql.Connection):
r['error'] += ' invalid database connection'
テスト目的でモック接続を渡したい。モック オブジェクトを正しい型のふりをさせる方法はありますか?
敬意を表しますが、あなたたちは正しくないようです!
前述のようにダックタイピングを使用できますが、最初に意図したことを実行する方法があります。
http://docs.python.org/dev/library/unittest.mock.htmlから
クラスまたはインスタンスを isintance テスト として使用する、spec
または渡すことができるオブジェクトをモックします。spec_set
>>>
>>> mock = Mock(spec=SomeClass)
>>> isinstance(mock, SomeClass)
True
>>> mock = Mock(spec_set=SomeClass())
>>> isinstance(mock, SomeClass)
True
私のコード例は次のようになります:
m = mock.MagicMock(spec=bpgsql.Connection)
isinstance(m, bpgsql.Connection)
これはTrueを返します
とは言っても、私はPythonでの厳密な型チェックを主張しているわけではありません。チェックする必要がある場合は、それを行うことができ、テストとモックでも機能します。
これは、多かれ少なかれ、厳密なタイプチェックを強制すべきではない理由です。その行をコードから完全に削除する必要があります。
それをしたくない場合は、必要なプロパティ(、、 ...?)を使用して抽象基本クラスを記述し、それ.connect()
を.cursor()
確認isinstance
します。
また<>
、aaagesでは廃止されました。を使用し!=
ます。