[英]Python mock a base class's attribute
為了進行測試,我想在基類中更改單個Class實例的屬性(self.attr)。
# app.py
class Base():
def __init__(self):
self.attr = 'original_value'
def show(self):
print(self.attr)
class App():
def __init__(self):
self.base = Base()
這是我嘗試模擬基類實例的屬性attr
嘗試
# test_app.py
from mock import Mock
from app import App
def test_mock_inherited_class_instance():
""" With mocking. Change app.base.attr from 'original_value' to 'new_value'.
"""
app = App()
app.base = Mock()
app.base.attr = 'new_value'
app.base.show() # I'd like this to show 'new_value', NOT 'original_value'
類的實例成員或實例變量與類屬性或類屬性不同。 這僅通過保留所有類屬性來嘲笑attr
。
import mock
from app import App
from app import Base
import unittest
from StringIO import StringIO
class TestApp(unittest.TestCase):
@mock.patch('sys.stdout', new_callable=StringIO)
def test_mock_instance_var(self, mocked_stdout):
base = Base()
app = App()
mock_base = mock.MagicMock(name='Base', spec=Base)
instance = mock_base.return_value
instance.attr.return_value = 'mmm'
base.attr = instance.attr.return_value
self.assertEqual(base.attr, 'mmm')
app.base = base
self.assertEqual(app.base.attr, 'mmm')
# the print stdout of show()
app.base.show()
self.assertEqual(mocked_stdout.getvalue(), 'mmm\n')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.