簡體   English   中英

Python模擬獲取地址而不是return_value

[英]Python Mock getting address instead return_value

我正在嘗試取消通話以檢查用戶的全名。 我已經使用模擬編寫了以下方法來做到這一點。

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()

如果我在上面的行中附加了調試器,並在外殼中運行它,那么它將起作用

[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)

我究竟做錯了什么?

您的代碼也會調用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()生成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM