36

私のpythonコードでは、パラメータの1つのタイプをチェックして、それが期待するタイプであることを確認しています。例えば:

def myfunction(dbConnection):
    if (type(dbConnection)<>bpgsql.Connection):
        r['error'] += ' invalid database connection'

テスト目的でモック接続を渡したい。モック オブジェクトを正しい型のふりをさせる方法はありますか?

4

2 に答える 2

80

敬意を表しますが、あなたたちは正しくないようです!

前述のようにダックタイピングを使用できますが、最初に意図したことを実行する方法があります。

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での厳密な型チェックを主張しているわけではありません。チェックする必要がある場合は、それを行うことができ、テストとモックでも機能します。

于 2012-07-01T15:16:16.430 に答える
4

これは、多かれ少なかれ、厳密なタイプチェックを強制すべきではない理由です。その行をコードから完全に削除する必要があります。

それをしたくない場合は、必要なプロパティ(、、 ...?)を使用して抽象基本クラスを記述し、それ.connect().cursor()確認isinstanceします。

また<>、aaagesでは廃止されました。を使用し!=ます。

于 2012-07-01T13:40:54.167 に答える