Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django中为视图编写get和post测试方法?_Python_Django_Unit Testing_Django Views_Django Testing - Fatal编程技术网

Python 如何在django中为视图编写get和post测试方法?

Python 如何在django中为视图编写get和post测试方法?,python,django,unit-testing,django-views,django-testing,Python,Django,Unit Testing,Django Views,Django Testing,我不熟悉Django的测试,并尝试为视图编写测试函数,但我不了解整个测试视图的内容,我看过很多示例,但似乎有点困难,我需要一个关于我所写内容的示例来了解这一点。 下面是我想测试其post并获取的函数: def ForgetPasswordRegistry(self, request): forgetpassword = True if request.method == 'GET': if 'UserID' in request.session:

我不熟悉Django的测试,并尝试为视图编写测试函数,但我不了解整个测试视图的内容,我看过很多示例,但似乎有点困难,我需要一个关于我所写内容的示例来了解这一点。 下面是我想测试其post并获取的函数:

    def ForgetPasswordRegistry(self, request):
    forgetpassword = True
    if request.method == 'GET':
        if 'UserID' in request.session:
            forgetpassword = False
        return request, forgetpassword
    elif request.method == 'POST':
        email = request.POST['email']
        if self.IsUserExist(email):
            forget = models.ForgetPasswordRegistry()
            forget.UserID = self.GetUser(email)
            forget.Access = 1
            session = random.randint(999999999999999, 9999999999999999999999999999999999)
            forget.Session = str(session)
            link = 'http://127.0.0.1:8000/home/resetpassword/' + forget.Session
            self.SendEmail('Reset-Password', link, [forget.UserID.Email])
            forget.save()
            FeedBack = ' Check Your Mail You Got A Recovery Mail'
            AlertType = 'alert-success'
            return request, AlertType, None, FeedBack, None, None
        else:
            AlertType = 'alert-danger'
            ModalFeedBack = 'This Email Dose Not Exist'
            EmailErrors = 'This Email Dose Not Exist'
            return request, AlertType, forgetpassword, None, EmailErrors, ModalFeedBack

使用Django的测试客户端:

例如:

from django.test import Client, TestCase


class ViewTestCase(TestCase):
    def test_post_creation(self):
        c = Client()  # instantiate the Django test client
        response = c.get('/forgetpassword/')
        self.assertEqual(response.status, 200)

不要让视图的概念迷惑你!!本质上,有一个python函数,您需要使用它的某些条件

看起来有4个主要分支:

  • 不开会
  • 开会
  • 职位存在
  • POST不存在
所以可能至少有4种不同的测试。我将发布第一个,因为它非常简单:

def ForgetPasswordRegistry(self, request):
forgetpassword = True
if request.method == 'GET':
    if 'UserID' in request.session:
        forgetpassword = False
    return request, forgetpassword

def test_forget_get_user_id_in_session(self):
    request = Mock(session={'UserID': 'here'}, method='GET')
    # instantiate your view class
    yourview = YourView()
    sefl.assertEqual(yourview.ForgetPasswordRegistry(request), (request, False))
post user exists分支稍微复杂一点,因为测试需要考虑更多的事情,并可能为以下方面提供存根实现:

  • 发送电子邮件
  • GetUser
  • models.ForgetPasswordRegistry()

这似乎不错,但我想检查post和get是否有效。不确定您的确切意思,状态代码为200表示HTTP响应有效。如果还有其他需要检查的内容(比如说“Success”的文本),可以检查响应的主体(例如,通过
response.body
)测试用例有一个attr
self.client