Django 2.1测试问题

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

首先,谢谢你抽出时间,对我的英语感到抱歉

我正在学习Django,我用python开发了几年,并决定开始检查这个框架。我得到一个奇怪的回答。我正在写一个测试用例,它在测试之外工作得非常好

这就是代码:

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):#存储数据的一些操作必须使用设置方法,例如登录某个用户。无论如何,谢谢你抽出时间来!:请发布您的答案,以便其他人受益。