【问题标题】:How to test if a method is called in django rest framework如何测试一个方法是否在 django rest 框架中被调用
【发布时间】:2019-11-13 14:16:55
【问题描述】:

我目前正在努力测试我的一个 API localhost:<port No.>/blah/。我的模型是

class class1(models.Model):
    field_a = models.integerfield(...)
    field_b = models.integerfield(...)

我还有一个序列化器:

class Class1Serializer(serializers.ModelSerializer):
    class Meta:
        model = Share
        fields = '__all__'

这是我的看法:

from .utils import prop
lass Class1View(viewsets.GenericViewSet,
                mixins.CreateModelMixin, ):
    queryset = Share.objects.all()
    serializer_class = ShareSerializer

    def perform_create(self, serializer, *args, **kwargs):
        _field_a = serializer.validated_data['field_a']
        _field_b = serializer.validated_data['field_b']

        if _field_a == 1:
            prop(test.objects.get(field_b = _field_b))

我的 urls.py 是:

router = routers.DefaultRouter()
router.register(r'blah', Class1View)

另外,我有 utils.py

def prop(Share):
    pass

如何编写测试来检查prop 是否被调用?

【问题讨论】:

    标签: django django-rest-framework django-views


    【解决方案1】:

    您可以使用模拟来检查它是否被调用。您可以使用@patch 装饰器来模拟使用mockobject.called 的断言函数,这是应该为您工作的示例代码

    from rest_framework.test import APIClient, 
    from django.test import TestCase
    from unittest.mock import patch
    
    
    class TestBlah(TestCase):
        @patch('view.prop') #this should be the path of the file where prop is to becalled
        def test_prop_is_called(self, mock_function):
                client = APICLient()
                client.post('/blah/' {'field_a':1, 'field_b': 1}, format='json')
                self.assert(mock_function.called)
    
    

    我写这篇文章有点着急。希望对你有用

    【讨论】:

      【解决方案2】:

      测试prop()是否被调用的方法是在_field_a = 1处构造一个测试输入,并使用断言来检查结果是否符合你的期望。

      如果你想测试prop() 是否做了它应该做的事情,你可以简单地编写一个单元测试,在其中实例化一个Share 对象,将它传递给prop(),然后评估输出(或side-效果?)看看它是否是你所期望的。

      如果你只是想知道它是否被调用,你也可以在函数中添加一个print()或日志语句。

      另一方面,如果你问如何判断示例是否完全按照给定被调用(只是一个包含pass的函数)——我不知道如何回答那个。

      【讨论】:

        猜你喜欢
        • 2014-02-11
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多