django - 如何进行 Django 单元测试 - 通过 1 个类重用来自 1 个数据库的数据
问题描述
正如您在 setUpClass 中看到的,我们定义了用户和配置文件。
当您查看方法时:
test_create_project
一切正常,测试通过。想法是因为项目和职位是通过该方法创建的,我想在方法中从数据库中使用它:
test_homepage
问题是当您尝试从 DB 中读取它们时,它们不再存在。我的问题是为什么。我知道我是否在
setUpClass
那么它将在数据库中。我的意思不是创建额外的项目和位置,如果我可以通过该方法第一次创建它 - 测试它然后在下一个方法中重用它 - 但不是通过使用 (self) 而是通过从数据库读取。
问题1:
Is that possible?
问题2:
Are methods in this class using separated DBes?
问题3:
What is the most efficient - and proper approach to this - my point is not to create extra records and reuse data as we go.
这些在 test_homepage 方法中为空:
print(project)
print(positions)
Django 2.2 测试:
from django.contrib.auth.models import User
from django.test import TestCase
from django.utils import timezone
from stb.core.models import Profile, Skill, Project, Position
class EntireAppTest(TestCase):
"""Updating Profile"""
@classmethod
def setUpClass(cls):
"""Creating User"""
super().setUpClass()
cls.user = User.objects.create_user(
username='johnconnor',
email='dude@nasa.gov',
password='terminator'
)
cls.profile = Profile.objects.get(user=cls.user)
skill = Skill()
skill.save()
skill.profile.add(cls.profile.id)
skill.title='python'
skill.save()
def setUp(self):
self.client.login(username='johnconnor', password='terminator')
def test_create_account(self):
self.user = User.objects.get(email='dude@nasa.gov')
self.assertEqual(User.objects.count(), 1)
self.assertEqual(self.user.username, 'johnconnor')
self.assertEqual(self.user.email, 'dude@nasa.gov')
def test_create_profile(self):
self.profile = Profile.objects.get(user=self.user)
now = timezone.now()
self.assertLess(self.profile.pub_date, now)
def test_create_project(self):
url = '/project/new/'
response = self.client.post(
url,
data={
'profile': self.profile,
'title': 'NASA JPL',
'position_formset-TOTAL_FORMS': 1,
'position_formset-INITIAL_FORMS': 0,
'position_formset-0-title': 'Python Developer',
'position_formset-0-description': 'description',
},
)
project = Project.objects.get(id=1)
position = Position.objects.get(project=project)
self.assertEqual(response.status_code, 302)
self.assertEqual(project.title, 'NASA JPL')
self.assertEqual(position.title, 'Python Developer')
def test_homepage(self):
url = '/'
response = self.client.get(
url,
data={},
)
positions = Position.objects.all()
project = Project.objects.all()
print(project)
print(positions)
# print(response.context)
self.assertEqual(response.status_code, 200)
解决方案
推荐阅读
- android - Jetpack Compose 中的长按手势
- javascript - 单击时获取href并使用简码重定向
- python - Keras Tuner 中带有外部参数的自定义损失
- python - Backtrader TradeAnalyzer 为空 - 其他分析器工作
- python - 如何在 Python 中将文本文件转换为列表?
- ios - 通过单击 TableView 中的 CollectionViewCell 来呈现 ViewController(有几个部分)
- r - 在 R 中的 Twitter SearchTwitter() 中循环
- android - 每次打开我的应用程序时都会触发 Android 工作管理器
- conv-neural-network - ValueError:形状 (None, 3) 和 (None, 4) 不兼容
- python - werkzeug.exceptions.BadRequestKeyError:400 错误请求:浏览器(或代理)发送了此服务器无法理解的请求。键错误:'file1'