Python模拟获取地址而不是返回值

2024-04-19 03:42:34 发布

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

我正在试着打一个电话检查一个用户的全名。我已经使用mock编写了下面的方法来实现这一点。你知道吗

def test_UserDisplayName(self):
    appModel = Mock()
    eval = appModel.eval.return_value
    eval.userDisplayName.return_value = 'JohnDoe'
    self._SummaryModel.AppModel = appModel
    actual = self._SummaryModel.UserDisplayName()
    self.assertEqual(actual, 'JohnDoe')

这是它正在调用的方法。 你知道吗

def UserDisplayName(self):
    return self.AppModel().eval().userDisplayName()

如果我将调试器附加到上面的行,并在shell中运行它,那么它就可以工作了

[PAUSED] >>> self.AppModel().eval().userDisplayName()
'JohnDoe'
[PAUSED] >>> 

但是当运行测试用例失败时,我得到的是地址而不是值。你知道吗

   ======================================================================
   FAIL: test_UserDisplayName (unittests.model.SummaryModelTest)
   ----------------------------------------------------------------------
   Traceback (most recent call last):
     File "/unittests/summary_model.py", line 112, in test_UserDisplayName
       self.assertEqual(actual, 'JohnDoe')
   AssertionError: <Mock name='mock.userDisplayName()' id='233406864'> != 'JohnDoe'

   ----------------------------------------------------------------------
   Ran 1 test in 0.010s

   FAILED:  (failures=1)

我做错什么了?你知道吗


Tags: 方法testselfreturnvaluedefevalmock
1条回答
网友
1楼 · 发布于 2024-04-19 03:42:34

您的代码也会调用AppModel,因此您需要为此调整其他引用:

eval = appModel.return_value.eval.return_value

演示:

>>> from unittest.mock import Mock
>>> appModel = Mock()
>>> eval = appModel.return_value.eval.return_value
>>> eval.userDisplayName.return_value = 'JohnDoe'
>>> appModel().eval().userDisplayName()
'JohnDoe'

但是,您的<Mock name='mock.userDisplayName()' id='233406864'>对象显示了一个mock.userDisplayName()的名称,这表明返回值是通过直接使用self.AppModel.userDisplayName()生成的。你知道吗

相关问题 更多 >