IT박스

모의 패치를 사용하여 인스턴스 메서드 모의

itboxs 2020. 11. 12. 08:02
반응형

모의 패치를 사용하여 인스턴스 메서드 모의


상상적으로 명명 된 Mock testing library를 사용하여 Django 앱을 테스트하는 동안 무언가를 조롱하려고합니다 . 제대로 작동하지 않는 것 같습니다. 이렇게하려고합니다.

models.py

from somelib import FooClass

class Promotion(models.Model):
    foo = models.ForeignKey(FooClass)
    def bar(self):
       print "Do something I don't want!"


test.py

class ViewsDoSomething(TestCase):
    view = 'my_app.views.do_something'

    def test_enter_promotion(self):
        @patch.object(my_app.models.FooClass, 'bar')
        def fake_bar(self, mock_my_method):
            print "Do something I want!"
            return True

        self.client.get(reverse(view))

내가 도대체 ​​뭘 잘못하고있는 겁니까?


Kit의 답변에 추가하려면 세 번째 인수를 지정 patch.object()하여 모의 객체 / 메소드를 지정할 수 있습니다. 그렇지 않으면 기본 MagicMock개체가 사용됩니다.

    def fake_bar(self):
        print "Do something I want!"
        return True

    @patch.object(my_app.models.FooClass, 'bar', fake_bar)
    def test_enter_promotion(self):
        self.client.get(reverse(view))
        # Do something I want!

모의 객체를 지정하면 기본값 MagicMock()더 이상 패치 된 객체에 전달되지 않습니다. 예를 들어 더 이상 :

def test_enter_promotion(self, mock_method):

대신 :

def test_enter_promotion(self):

http://www.voidspace.org.uk/python/mock/patch.html#patch-object


아, 패치 데코레이터를 어디에 적용해야하는지 혼란 스러웠습니다. 결정된:

class ViewsDoSomething(TestCase):
    view = 'my_app.views.do_something'

    @patch.object(my_app.models.FooClass, 'bar')
    def test_enter_promotion(self, mock_method):
        self.client.get(reverse(view))

참고URL : https://stackoverflow.com/questions/8469680/using-mock-patch-to-mock-an-instance-method

반응형