2

Я пытаюсь исправить функцию представления в TestCase в django. У меня есть класс:Как издеваться над определенным методом класса на основе View без переопределения `self`?

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. Я мог бы исправить метод представления или вида экземпляра, но в любом случае я не знаю, как фальшивая функция правильно установит attribute и thing, а не тестовые примеры.

+1

Вы попробовали исправление 'fancy_stuff', чтобы вернуть пустой список? –

+0

попробовал это и понял, что мне нужно исправить обе вещи '_get_data' делает – codyc4321

+1

Вы можете назвать эту переменную' self', что бы вы ни хотели. Это называется «я» - это просто конвенция. Если хотите, назовите его 'this', или' that', или 'whatever'. – poke

ответ

1

Исправить ошибку _get_data на BaseView, чтобы установить side_effect, который устанавливает соответствующие переменные экземпляра в представлении.

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 

 Смежные вопросы

  • Нет связанных вопросов^_^