Python 如何在不重写“self”的情况下模拟基于类的视图的特定方法?
我试图在django的测试用例中修补视图的函数。我有一门课:Python 如何在不重写“self”的情况下模拟基于类的视图的特定方法?,python,django,python-3.x,django-class-based-views,django-unittest,Python,Django,Python 3.x,Django Class Based Views,Django Unittest,我试图在django的测试用例中修补视图的函数。我有一门课: 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 = []
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实例,我不知道如何在中使用patch(thing)作为name
部分进行修补。
我可以修补视图或视图实例的方法,但无论如何,我都不知道fake函数如何正确设置视图的
属性
和东西
,不是测试用例。在BaseView
上修补\u get\u data
方法,以产生副作用,从而在视图上设置适当的实例变量
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
您是否尝试过修补fancy_stuff
以返回空列表?尝试过之后,我意识到我必须修补这两个东西\u获取数据
does您可以根据需要命名该self
变量。它被称为“自我”
,只是一种惯例。如果愿意,可以将其命名为this
,或that
,或任意一种方法。无论哪种方法,它都会将TestCase实例设置为属性,而不是视图。查看应如何在BaseView
上设置self.thing
,但是测试类中的补丁会在测试中设置它们class@codyc4321我在下面添加了一个答案,让我知道它是否有效/如果你还有其他问题