Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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测试URL时模拟数据库访问_Python_Django_Unit Testing - Fatal编程技术网

Python 如何在使用Django测试URL时模拟数据库访问

Python 如何在使用Django测试URL时模拟数据库访问,python,django,unit-testing,Python,Django,Unit Testing,我想测试一些django应用程序URL。但是,关联的视图链接到数据库。我想做的是嘲弄view方法的这些方面,但我不知道怎么做 让我们假设我想尝试/signinurl,它是一种经典的signin形式。 关联的视图如下所示: def login(request): if 'user' in request.session: return redirect(reverse("home")) if request.method == 'POST': for

我想测试一些django应用程序URL。但是,关联的视图链接到数据库。我想做的是嘲弄view方法的这些方面,但我不知道怎么做

让我们假设我想尝试
/signin
url,它是一种经典的signin形式。 关联的视图如下所示:

def login(request):
    if 'user' in request.session:
        return redirect(reverse("home"))
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            return treat_login(request, username, password) # checks if couple 
                                                              is present in 
                                                              database, returns 
                                                              pages accordingly
    else:
        form = LoginForm()
    return render(request, 'login.html', {'form':form, })
在我的测试中,我没有隐式调用
login
方法,因为我只使用
url

class Tests_urls(TestCase):
    def test_signin(self):
        self.client.post(reverse("login"), {"username":"login", "password":"pwd"})
        self.assert_http_status(url, status, "after a standard login")
该测试的问题是需要执行一个数据库,这是我想要避免的(我不能使用嵌入式测试数据库)


因此,我想知道如何从测试的角度模拟
treat_login
方法。

您可以从

您还可以检查调用参数。但是你写这个测试的方式让这有点难。如果您使用并通过执行以下操作来测试函数

request = self.factory.post(
    reverse("login"), {"username":"login", "password":"pwd"})

response = login(request

mock_treat_login.assert_called_once_with(request, "login", "pwd)
然后你就可以确定你的呼叫是正确的

request = self.factory.post(
    reverse("login"), {"username":"login", "password":"pwd"})

response = login(request

mock_treat_login.assert_called_once_with(request, "login", "pwd)