如何为django-rest-framework api编写单元测试?

时间:2014-07-23 07:31:50

标签: python django unit-testing mocking django-rest-framework

我使用Django-rest-framework视图集和路由器公开了我的数据库模型,我正在尝试为它编写单元测试。

以下是我的API和测试代码

Viewsets.py

class Model1ViewSet(viewsets.ReadOnlyModelViewSet):

    model = Model1
    serializer_class = Model1Serializer
    filter_class = Model1Filter
    filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter)
    ordering = ('id', 'cl1')

Serializer.py

class Model1Serializer(serializers.HyperlinkedModelSerializer):
    chip = serializers.HyperlinkedRelatedField(view_name="some-detail")

    class Meta:
        model = Model1
        fields = ('url', 'id', 'cl1', 'cl2', 'cl3', 'cl4')
        depth = 1

单元测试

from rest_framework.test import APIClient

class TestModel1Api(unittest.TestCase):

    def setUp(self):
        self.client = APIClient()

    def test_Model1_list(self):
        response = self.client.get(reverse('Model1-list'))
        self.assertEqual(response.status_code, status.HTTP_200_OK)

    def test_Model1_detail(self):
        mm_objs = Model1.objects.all()
        if mm_objs:
            response = self.client.get(reverse('Model1-detail', args=[mm_objs[0].id]))
            self.assertEqual(response.status_code, status.HTTP_200_OK)

我不想连接到数据库进行单元测试,因为它属于集成测试。

有没有办法模拟数据库?我知道如何对标准视图函数应用模拟,但这里模拟不起作用。

  1. 如何为我的REST-API编写单元测试?
  2. 如何在我的单元测试中模拟数据库?

1 个答案:

答案 0 :(得分:3)

当您运行manage.py test时,将创建数据库的基础,但它不包含任何数据。要做到这一点,您可以自己创建必要的对象或使用FactoryBoy

之类的东西

请记住,在开始新数据库时,数据库会清除以前测试方法中的数据。