【问题标题】:Django - Query_set returns an empty arraylist when it is ran in the testDjango - Queryset 在测试中运行时返回一个空数组列表
【发布时间】:2021-11-01 11:18:39
【问题描述】:

我正在尝试在我的模型上运行 TestCase。

我已经创建了一个 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 创建了一个测试“虚拟数据库”以用于测试,然后将其拆毁,但我是否遗漏了一些非常明显的东西?

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

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

我检查了这个问题之前是否没有被问过,但我看不到任何答案。如果在某处得到答复,请提前道歉。

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

谢谢。

【问题讨论】:

    标签: django testcase


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的帮助!我正在使用 setUp 函数,但我错误地将引号放在数字前面(我知道这很愚蠢),因此我得到了一个空的 query_set。但现在谢天谢地,它正在工作,我可以用它来 for 循环来构建直方图。再次感谢您的帮助
    • 可以犯错 :) 很高兴你解决了它 :)
    猜你喜欢
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2015-10-08
    • 2022-01-23
    • 2020-10-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    相关资源
    最近更新 更多