我目前正在努力测试我的一个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
?
发布于 2019-11-13 14:59:06
您可以使用mocking来检查它是否被调用。您可以使用@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)
我写这篇文章有点匆忙。希望你会发现它很有用
发布于 2019-11-13 14:41:06
测试是否调用了prop()
的方法是在_field_a = 1
处构造一个测试输入,并使用断言检查结果是否符合您的预期。
如果您想测试prop()
是否做了它应该做的事情,您可以简单地编写一个单元测试,在其中实例化一个Share
对象,将其传递给prop()
,并计算输出(或者副作用?)看看这是不是你想要的。
如果只想知道它是否被调用,也可以在函数中添加一条print()
或日志语句。
另一方面,如果您问如何判断示例是否已被调用(只是一个包含pass
的函数) --我不知道如何回答。
https://stackoverflow.com/questions/58839125
复制相似问题