gpt4 book ai didi

python - 如何在不覆盖 `self` 的情况下模拟基于类的 View 的特定方法?

转载 作者:行者123 更新时间:2023-11-28 18:31:48 25 4
gpt4 key购买 nike

我正在尝试在 Django 的 TestCase 中修补 View 的功能。我有一个类:

class BaseView(View):

def _get_data(self):
self.attribute = self.fancy_stuff()
self.thing = self.do_other_stuff()

我需要将 self.attribute 模拟成一个空列表,例如:

_get_data_fake_function():
self.attribute = []
self.thing = True

问题是我在这样的测试用例中:

class MyTests(TestCase):

def setUp(self):
self.view = BaseView
self.view_instance = self.view()

def test_stuff(self):
with patch(self.view) as mock_view:
?

我担心 self 会引用 TestCase 实例,而且我对如何在 with patch(thing) as name 部分打补丁感到困惑。我可以修补 View 或 View 实例的方法,但无论哪种方式,我都不知道假函数如何正确设置 View 的 attributething,而不是测试用例.

最佳答案

修补 BaseView 上的 _get_data 方法以产生一个 side_effect,在 View 上设置适当的实例变量。

class MyTests(TestCase):

def setUp(self):
self.view = BaseView
with patch.object(self.view, '_get_data', side_effect=view_data_mock):
self.view_instance = self.view()

def test_stuff(self):
self.assertEqual([], self.view_instance.attribute)
self.assertTrue(self.view_instance.thing)

def view_data_mock(view):
view.attribute = []
view.thing = True

关于python - 如何在不覆盖 `self` 的情况下模拟基于类的 View 的特定方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36440544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com