Django - Query_set returns 一个空数组列表,当它在测试中是 运行

Django - Query_set returns an empty arraylist when it is ran in the test

我正在尝试 运行 我的模型上的测试用例。

我已经为这个项目创建了一个 MySQL 数据库(特别是通过 HeidiSQL GUI 的 MariaDB)并与内部的相应数据连接。

我的test.py代码如下:

class TestArrivalProbabilities(TestCase):
    def test_get_queryset_test(self):
        print("Hello Steve!")
        i = 1
        self.assertEqual(i, 1)
        l = [3, 4]
        self.assertIn(4, l)

    def test_get_queryset_again(self):
        query_set = ArrivalProbabilities.objects.all()
        print(query_set)
        n = len(query_set)
        print(n)  # Print each row
        bin_entries = []
        bin_edges = []
        for i in range(n):
            print(query_set[i])
            if query_set[i].binEntry is not None:
                bin_entries.append(query_set[i].binEntry)
            bin_edges.append(query_set[i].binEdge)
        print(bin_entries, bin_edges)

        hist = (numpy.array(bin_entries), numpy.array(bin_edges))

然而,终端中的输出是这样的:

(venv) C:\Users\Steve\uni-final-project>python manage.py test     
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
<QuerySet []>
0
[] []
.Hello Steve!
.
----------------------------------------------------------------------
Ran 2 tests in 0.016s

OK
Destroying test database for alias 'default'...

我试图弄清楚为什么我构建的 MySQL 数据库没有被使用。我读到 Django 创建了一个测试 'dummy database' 用于测试,然后将其拆下,但我是否遗漏了一些非常明显的东西?

我认为这不是连接问题,因为我已经通过 pip 安装了 mysqlclient。我尝试使用 https://docs.djangoproject.com/en/3.2/topics/db/queries/#creating-objects 但我仍然得到相同的结果。

我已经阅读了文档,但由于我是软件开发的新手,而且这门课程的学习曲线相当陡峭,所以我在某些方面遇到了困难。

我查看了是否以前没有人问过这个问题,但我看不到任何答案。如果在某处得到回答,请提前致歉。

非常感谢任何正确方向的帮助或解决方案。

谢谢。

首先,您应该阅读与测试相关的内容,而不是 Django 的创建对象。当你想测试你的代码时,通常有一些关于数据库的方法。在官方 django documentation 中,它展示了如何处理数据库实例。只需在您开始测试时,它就会创建一个测试数据库并运行您的测试用例。为此,您可以使用 setUp 函数 请添加此内容并重试:

class TestArrivalProbabilities(TestCase):
    def setUp(self):
        ....
        ArrivalProbabilities.objects.create(...)
        ArrivalProbabilities.objects.create(...)
        ....

在这部分之后,您将不会再看到空的查询集。 您也可以使用 fixtures