我使用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)
我不想连接到数据库进行单元测试,因为它属于集成测试。
有没有办法模拟数据库?我知道如何对标准视图函数应用模拟,但这里模拟不起作用。
答案 0 :(得分:3)
当您运行manage.py test
时,将创建数据库的基础,但它不包含任何数据。要做到这一点,您可以自己创建必要的对象或使用FactoryBoy
请记住,在开始新数据库时,数据库会清除以前测试方法中的数据。