如何为django-rest-framework API编写单元测试?
我用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)
我不想在单元测试中连接数据库,因为那样就变成集成测试了。
有没有办法模拟数据库?我知道怎么对标准视图函数进行模拟,但在这里模拟却不起作用。
- 我该如何为我的REST-API编写单元测试?
- 我该如何在单元测试中模拟数据库?
1 个回答
9
当你运行 manage.py test
时,你的数据库会被创建,但里面没有任何数据。要填充数据,你可以自己手动创建需要的对象,或者使用像 FactoryBoy 这样的工具。
记住,每次开始新的测试时,数据库里的旧数据会被清空。