Python Djnago中的单元测试

问题描述

我正在使用

Django == 3.0.3

djangorestframework == 3.11.0

python == 3.6.8

我想为API编写单元测试,不需要使用任何数据库(不需要模拟数据库) 那意味着我想模拟数据库调用并编写单元测试用例

我该如何写出用于哪个属性

显示我的api

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def employee_entry(request):
    try:
        login = User.objects.get(pk=request.user.id)
        validationmsg = ''
        emp_data = request.data
        if not emp_data:
            validationmsg = validation["FDP15"]
        elif emp_data["EmployeeName"] is None or emp_data["EmployeeName"] == '':
            validationmsg = validation["FDP1"]
        elif emp_data["EmployeeCode"] is None or emp_data["EmployeeCode"] == '':
            validationmsg = validation["FDP2"]
        elif Employee.objects.filter(EmployeeCode=emp_data["EmployeeCode"]).count() > 0:
            validationmsg = validation["FDP3"]
        if validationmsg != '':
            return Response({msg: validationmsg},status=status.HTTP_400_BAD_REQUEST)
        employee = Employee(
            EmployeeName=emp_data["EmployeeName"],EmployeeCode=emp_data["EmployeeCode"],Security=emp_data["Security"],CreatedDate=date.today(),CreatedUser=login,)
        employee.save()
        if emp_data["Security"] == 1:
            device = Device.objects.filter(~Q(DeviceStatus=static_values["const0"]))
            employee.Device.set(device)
        elif emp_data["Security"] == 0:
            device = Device.objects.filter(~Q(DeviceStatus=static_values["const0"]),DefaultAccess=True)
            employee.Device.set(device)
        return Response({"EmployeeId": employee.EmployeeId},status=status.HTTP_200_OK)
    except(KeyError,TypeError,ValueError) as ex:
        logging.getLogger("error_logger").exception(repr(ex))
        return Response({msg: validation["FDP21"]},status=status.HTTP_400_BAD_REQUEST)
    except Exception as ex:
        logging.getLogger("error_logger").exception(repr(ex))
        return Response({msg: validation["FDP23"]},status=status.HTTP_400_BAD_REQUEST)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)