首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在django rest框架中测试方法是否被调用

如何在django rest框架中测试方法是否被调用
EN

Stack Overflow用户
提问于 2019-11-13 22:16:55
回答 2查看 212关注 0票数 2

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

代码语言:javascript
运行
复制
class class1(models.Model):
    field_a = models.integerfield(...)
    field_b = models.integerfield(...)

我还有一个序列化程序:

代码语言:javascript
运行
复制
class Class1Serializer(serializers.ModelSerializer):
    class Meta:
        model = Share
        fields = '__all__'

这是我的观点:

代码语言:javascript
运行
复制
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是:

代码语言:javascript
运行
复制
router = routers.DefaultRouter()
router.register(r'blah', Class1View)

还有,我有utils.py

代码语言:javascript
运行
复制
def prop(Share):
    pass

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

EN

回答 2

Stack Overflow用户

发布于 2019-11-13 22:59:06

您可以使用mocking来检查它是否被调用。您可以使用@patch装饰器来模拟使用mockobject.called的断言函数。下面是适用于您的示例代码

代码语言:javascript
运行
复制
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)

我写这篇文章有点匆忙。希望你会发现它很有用

票数 3
EN

Stack Overflow用户

发布于 2019-11-13 22:41:06

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

如果您想测试prop()是否做了它应该做的事情,您可以简单地编写一个单元测试,在其中实例化一个Share对象,将其传递给prop(),并计算输出(或者副作用?)看看这是不是你想要的。

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

另一方面,如果您问如何判断示例是否已被调用(只是一个包含pass的函数) --我不知道如何回答。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58839125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档