当前位置: 首页 > 面试题库 >

Django的self.client.login(...)在单元测试中不起作用

洪捷
2023-03-14
问题内容

我已经通过两种方式为我的单元测试创​​建了用户:

1)为“ auth.user”创建一个大致如下的灯具:

    { 
        "pk": 1, 
        "model": "auth.user", 
        "fields": { 
            "username": "homer", 
            "is_active": 1, 
            "password": 
"sha1$72cd3$4935449e2cd7efb8b3723fb9958fe3bb100a30f2", 
            ... 
        } 
    }

我省去了看似不重要的部分。

2)在setUp函数中使用“ create_user”(尽管我宁愿将所有内容保留在我的Fixture类中):

def setUp(self): 
       User.objects.create_user('homer', 'ho...@simpson.net', 'simpson') 

请注意,两种情况下的密码均为辛普森。

我已验证该信息一次又一次正确地加载到测试数据库中。我可以使用User.objects.get来获取User对象。我可以使用“ check_password”验证密码是否正确。用户处于活动状态。

但是,self.client.login(username =’homer’,password =’simpson’)总是失败。我对为什么感到困惑。我想我已经阅读了与此相关的每个互联网讨论。有人可以帮忙吗?

我的单元测试中的登录代码如下所示:

    login = self.client.login(username='homer', password='simpson') 
    self.assertTrue(login) 

问题答案:

无效的代码:

from django.contrib.auth.models import User
from django.test import Client

user = User.objects.create(username='testuser', password='12345')

c = Client()
logged_in = c.login(username='testuser', password='12345')

为什么不起作用?
在上面的代码段中,User创建时,实际的密码哈希设置为12345。当客户端调用该login方法时,password参数的值12345将通过哈希函数传递,结果是

hash('12345') = 'adkfh5lkad438....'

然后将其与存储在数据库中的哈希进行比较,并且拒绝客户端访问,因为 'adkfh5lkad438....' != '12345'

解决方案

正确的做法是调用set_password函数,该函数通过哈希函数传递给定的字符串并将结果存储在中User.password

另外,调用后,set_password我们必须将更新的User对象保存到数据库中:

user = User.objects.create(username='testuser')
user.set_password('12345')
user.save()

c = Client()
logged_in = c.login(username='testuser', password='12345')


 类似资料:
  • 我正在尝试使用intellij idea运行单个spock单元测试。 考虑: 在上面的测试中,当我转到测试主体和右上下文菜单时,我得到了两种类型的测试。一个是grails测试,另一个是junit测试。 关于这个问题,公认的答案建议使用jUnit运行程序。但是使用它,代码根本无法编译(可能是因为某些插件和其他类不可用)。 (我不确定,因为这是期望的行为,因为我只是运行一个测试,而不是所有的测试。所以

  • 我正在尝试使用Mockito在SprinBoot应用程序中进行一些jUnit测试。 现在我的服务有了一些变量,可以从通过注释: 我试图通过像这样使用来测试这个: 但是,该属性不会被填充,并保持为。 这方面有很多TPOIC,但我还没能拼凑出一个解决方案。我看到解决方案建议,但它似乎想做一个集成测试,使服务加速,但由于无法连接到数据库,服务失败了。所以这不是我想要的。 我还看到一些解决方案建议我制作一

  • 我对SonarRunner有以下问题。 SonarQube 以及 Sonar 运行器无法拉取 junit 格式的 xml 报告 “单元测试”或“测试覆盖率”小组件不显示。它说没有数据。我正在按照此处描述的说明进行操作 我按照描述手动创建了XML格式的报告文件,但是仍然没有成功。 下面是 XML 文件 - TEST-Firefox_210_Mac_OS.com.company.BarTest.xml

  • 问题内容: 我正在尝试在python单元测试中模拟常量。 我有一个名为 settings.py 的模块,其中包含一组常量,特别是我有一个: 然后在另一个模块中,我有一个使用REL_PATH变量的函数,如下所示: 在我的单元测试中,我有以下代码: 我希望通过这种方式将在“另一个/自定义/路径/”路径下创建csv文件,但仍在原始目录中创建csv文件。 我也试图这样做: 但最终结果是相同的。 我究竟做错

  • 我最近安装了Android Studio Arctic Fox v2020。3.1 Beta 2能够在我们的项目中使用Jetpack,因为在4.2.1版本中我无法这样做,因为抛出了一个奇怪的构建错误,在北极狐上得到了修复。 问题是,在加载项目、更新我能够构建和运行的一些SDK/库之后,没有问题。然而,当我去运行单元测试时,我注意到IDE不再识别所有测试类。经过一些调查,我发现AS的新版本将不再识别

  • 问题内容: 我正在尝试使用Spring测试实体EJB3。 EJB本身不使用Spring,并且我想使生产JPA配置的重复保持最少(例如,不重复persistence.xml)。 我的单元测试似乎可以正常工作,但是即使我的单元测试应该是事务性的,数据仍会在各种测试方法之间持久存在…… 这是我的实体: 我的单元测试: 和我的appContext.xml: 当我运行测试时,test2失败,因为它找到了两个