0

私はPython 2.6.6を使用しています

私がやろうとしているのは、オブジェクトの作成をモックに置き換えて、正しい呼び出しが行われるようにすることです。率直であるべきです。

私のモジュール:

import dir.SubModule

class Cls( object ):
    def Start( self ):
        self.__obj = dir.SubModule.SubCls()
        self.__obj.foo()

私のテスト:

import MyModule
import unittest
from mock import Mock, MagicMock, patch

class MyTest( unittest.TestCase ):
    def setUp( self ):
        self.uut = MyModule.Cls()

    def test_one( self ):
        with patch( 'dir.SubModule.SubCls', spec=True ) as mockObj:
            print "mock calls before"
            print mockObj.mock_calls
            self.uut.Start()

            print "called: "      + str( mockObj.called )
            print "foo called: " + str( mockObj.foo.called )
            print "call_count: "  + str( mockObj.call_count )
            print "call_args: "   + str( mockObj.call_args )
            print "args_list: "   + str( mockObj.call_args_list )
            print "mock calls:\n" + str( mockObj.mock_calls )
            print "method calls:\n " + str( mockObj.method_calls )

出力は次のとおりです。

mock calls before:
[]
called: True
foo called: False
call_count: 1
call_args: call()
args_list: [call()]
mock calls:
[call(), call().foo()]
method calls:
[]

それでもテストは失敗します:

AssertionError: Expected call: foo()
Not called

呼び出しが行われたことをモックがどのように報告できるかはわかりませんが、それらが呼び出されたと断言することはできません。私は何が欠けていますか?

編集:すべてのメトリックのレポートを追加した後、python モックについて誤解している基本的なものがあるようです。foo() が呼び出しリストにある場合、呼び出しカウントが 1 しかないのはなぜですか? また、foo.called が「False」を報告するのはなぜですか?

4

3 に答える 3

0

ここにリンクがあります: リンク

私の簡単な修正:

with patch( 'class' ) as mockCreator:
    mockObj = mockCreator.return_value

次に、「mockObj」を意のままに使用できます。

先週、モックについて初めて学習したときに、リンクされたソリューションに出くわしました。情報を理解するには少し早すぎました。

于 2016-03-17T18:19:54.537 に答える