【问题标题】:Example of how to write Django Test如何编写 Django 测试的示例
【发布时间】:2015-08-27 18:16:27
【问题描述】:

我必须为我构建的一些服务编写一些测试,这些服务将我们的后端连接到另一个团队成员正在构建的移动应用程序。完成后,我被要求编写一些单元测试。我不熟悉 Django 测试,所以我想问一下是否有人可以给我一个示例,说明您将如何测试其中一项服务。这样我就可以通过示例学习,然后自己完成其余的工作?

这是我构建的一个服务示例,它通过该电子邮件在我们的数据库中查找用户并返回一个 json 对象:

@csrf_exempt
def user_find(request):
    args = json.loads(request.body, object_hook=utils._datetime_decoder)
    providedEmail = args['providedEmail']
    try:
        user = User.objects.get(email=providedEmail)
        user_dict = {'exists': 'true', 'name': user.first_name, 'id': user.id}
        return HttpResponse(json.dumps(user_dict))
    except User.DoesNotExist:
        user_dict = {'exists': 'false'} 
        return HttpResponse(json.dumps(user_dict))

测试这样的事情的正确方法是什么?我猜我必须以某种方式模仿一个给我一封电子邮件的请求,然后进行两个测试,一个匹配一个不匹配现有用户,并确保每个测试都返回适当的对象。这是正确的思考方式吗?有人可以帮我解决一下语法吗?我猜想以某种方式使用 django.test.Client 是否合适?

【问题讨论】:

    标签: python django unit-testing testing


    【解决方案1】:

    你需要测试的是你的代码是否不能被破坏。这意味着您的代码应该始终给出响应,并且在任何情况下都不会产生任何错误。

    因为如果你可以测试的东西是-

    1) 授权 - 是任何用户或只有经过身份验证的用户才能访问的服务,如果仅经过身份验证,则测试两种用户的响应,匿名用户和经过身份验证的用户。在测试响应时,测试匿名用户是否获得 401 和经过身份验证的用户获得 200。

    2) 回复不存在的电子邮件

    3) 如果 first_name 是可选的,则对没有 first_name 的用户的响应。

    4) 有效请求时的响应数据 - 是正确用户收到的数据

    可能还有更多测试,这些都是我的想法。

    【讨论】:

    • “您的代码应该始终给出响应,并且在任何情况下都不会产生任何错误” - 这是不准确的。例如,期望格式错误的请求(例如,不包含 providedEmail 的请求)会导致调用者负责处理的某种异常,这是完全合理的。
    • @jonrsharpe- 是的,我只是概述了测试可能包含的内容。
    猜你喜欢
    • 2023-02-06
    • 1970-01-01
    • 2012-03-23
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多