Python模拟类是如何工作的?

2024-03-29 13:41:20 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个例子,我有一个类:

发动机/a.py

from thirdlib import TaskClient
class TaskWorker(object):
    def __init__(self):     
          self.task_client = TaskClient(xxx, xxx, xxx, xxx)

    def some_task(id, app):
        tasks = self.task_client.query(1,2,3,4)
        print "tasks: " tasks
        for task in tasks:
           do_something()

然后我想测试一下:

class ImporterTest(unittest.TestCase):
    def setUp(self):
        self.client_patcher = patch('engine.a.TMClient', autospec=True)
        self.client_mocked = self.client_patcher.start()
        self.worker = TaskWorker()

def tearDown(self):
    self.client_patcher.stop()

def test_task_return_empty(self):
    self.client_mocked.query.return_value = []
    value = self.worker.some_task(1, 'notcare')
    #self.assertFalse(value)
    #print self.client_mocked.mock_calls
    self.client_mocked.query.assert_called_with(1,2,3,4)     

此测试将失败,原因是query.assert_调用了哦

 Tasks: <MagicMock name='TMClient().query()' id='139779549447120'>

Traceback (most recent call last):
 File "/home/xxx/lib/python2.7/site-packages/mock/mock.py", line 925, in assert_called_with
  raise AssertionError('Expected call: %s\nNot called' % (expected,))

AssertionError:预期调用:query(1,2,3,4) 未调用

打印应为“Tasks:[]”,但不是,因为名为\u with的断言\u也失败


Tags: pyselfclienttaskvaluedefwithassert