2

Pythonのモックライブラリを理解するのに問題があります。次に例を示します。Aにはtest.pyとanother.pyの2つのファイルがあります

test.py

#!
from mock import patch
from another import C


class A(object):
    def method(self):
        return 2


@patch('another.C')
@patch('test.A')
class TestB(object):

    def test1(self, mA, mC):
        print mA, A
        print mC, C

another.py

class C(object):

    def a(self):
        return 3

したがって、質問は「なぜAが出力に含まれるのか:

<MagicMock name='A' id='13985040'> <MagicMock name='A' id='13985040'>
<MagicMock name='C' id='13993936'> <class 'another.C'>

another.pyのクラスにパッチを適用できないのはなぜですか?私の場合、テストする関数が多く、他のファイルからクラスをインポートします。だから私はそれらを正しくする方法を理解できません。

ありがとう

4

1 に答える 1

1

Pythonモックライブラリを使用すると、実際に使用している場所で関数またはクラスに常にパッチを適用(モック)します。

'C'を'test'にインポートして使用しているので、次のようにパッチを適用します。

@patch('test.C')
@patch('test.A')
class TestB(object):

    def test1(self, mA, mC):
        print mA, A
        print mC, C

これにより、次のような出力が得られます。

<MagicMock name='A' id='3070076204'> <MagicMock name='A' id='3070076204'>
<MagicMock name='C' id='3070084940'> <MagicMock name='C' id='3070084940'>

必要なクラス、メソッド、または関数をモックできます。ただし、実際に使用されている場所でオブジェクトをモックする必要があります。

于 2012-07-15T15:24:18.647 に答える