Django 2.1测试问题
首先,谢谢你抽出时间,对我的英语感到抱歉 我正在学习Django,我用python开发了几年,并决定开始检查这个框架。我得到一个奇怪的回答。我正在写一个测试用例,它在测试之外工作得非常好 这就是代码:Django 2.1测试问题,django,django-tests,Django,Django Tests,首先,谢谢你抽出时间,对我的英语感到抱歉 我正在学习Django,我用python开发了几年,并决定开始检查这个框架。我得到一个奇怪的回答。我正在写一个测试用例,它在测试之外工作得非常好 这就是代码: class BoardTopicsTests(TestCase): # Hago las acciones necesarias para empezar el test def setUp(self): self.board = Board(name="Djang
class BoardTopicsTests(TestCase):
# Hago las acciones necesarias para empezar el test
def setUp(self):
self.board = Board(name="Django", description="Django board.")
# self.board.save()
# Compruebo el status_code 200
def test_board_topics_view_status_code(self):
# self.board.save()
url = reverse("board_topics", kwargs={"pk":1})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
# Compruebo el status_code 404
def test_board_topics_view_not_found_status_code(self):
url = reverse("board_topics", kwargs={"pk" : 99})
response = self.client.get(url)
self.assertEqual(response.status_code, 404)
# Compruebo que resuelve bien el board
def test_board_topics_url_resolves_board_topics_views(self):
view = resolve("/boards/1/")
self.assertEqual( view.func.__name__, BoardTopics.as_view().__name__ )
如果我在设置中保存电路板,则方法测试\电路板\主题\视图\状态\代码返回404,如果我在方法中保存电路板,则返回200并通过测试
我想我遗漏了一些东西,因为我认为它必须从设置方法中保存
拜托,有人能帮忙吗?这只是为了学习,因为我想知道那里发生了什么
如果我在测试\电路板\主题\视图\状态\代码中打印(self.board.id),它将按原样返回1
多谢各位 经过一番研究,我得出了解决方案:
@classmethod
def setUpTestData(cls):
Board.objects.create(name="Django", description="Django board.")
而不是:
def setUp(self):
self.board = Board(name="Django", description="Django board.")
self.board.save()
它是有效的,但我正试图用另一个类做同样的事情,404仍然返回。。。在那个特定的测试用例中有效,在另一个测试用例中无效,oO
我正在进一步研究,如果我找到了“终极”解决方案,我会回信的
更新:
最后我发现了问题!解决方案是下一个:
@classmethod
def setUpTestData(cls):
self.board = Board.objects.create(name="Django", description="Django board.")
# Compruebo el status_code 200
def test_board_topics_view_status_code(self):
url = reverse("board_topics", kwargs={"pk":self.board.pk})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
请注意,在kwargs中,pk的值是self.board.pk而不是(这里的错误是)硬编码1,因为我们不知道pk是否为1!!!哦,那个愚蠢的错误让我一夜没睡
因此,最后我们可以在下一个月继续:
- 使用setUpTestData代替setUp添加数据
- 不要硬编码pk,存储已插入的对象并返回pk
您的S3yk0我做了更多的研究,找到了解决方案:如果您想设置测试数据,必须使用:@classmethod def setUpTestData(cls):#存储数据的一些操作必须使用设置方法,例如登录某个用户。无论如何,谢谢你抽出时间来!:请发布您的答案,以便其他人受益。