Я использую Python 2.6.6
То, что я пытаюсь сделать, это заменить создание объекта Mock, чтобы убедиться, что сделаны правильные вызовы. Должно быть прямо.
Мой модуль:
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.call сообщает «False»?
foo
s и неправильный корпус Python. - person Bobort   schedule 07.07.2020