20

我想测试我的小应用程序,我把它放在一个单独的包中。现在我创建了一个“test_project”目录,在那里创建了一个测试项目,我正在使用该项目的 manage.py 来运行测试。但我一直想知道 - 有没有更好的方法?是否可以启动单个应用程序的测试,也许使用一些默认配置(如 sqlite 数据库)?

4

5 回答 5

11

写下来因为我还没有在这里看到

从文档

如果您的 django 结构看起来像这样:

Project dir/
    /myapp
    /myotherapp
    /myproject

Django 允许您通过执行以下命令仅从“myotherapp”执行测试:

./manage.py test myotherapp/

这将在“myotherapp”下执行所有测试,而

./manage.py test 

将在您的项目目录中执行所有测试。

于 2016-02-04T17:22:17.023 回答
8

可以独立运行单个应用程序的测试,而无需为此创建 Django 测试项目。这样做的一种方法是runtests.py在应用程序的根目录中创建一个设置 Django 设置并以./manage.py test your_app编程方式运行的目录。一个例子runtests.py是 Django 自己的:runtests.py文档)。

Django's ownruntests.py是一个很好的参考,但我发现它在大多数情况下很复杂。以下是几个替代示例:

于 2018-02-21T12:09:55.713 回答
6

如果您使用鼻子,您可以运行单个应用程序的测试。

python manage.py test app.tests:TestClassHere

至于测试单个应用程序。我只是遵循其他大型 django 项目所做的约定,而这正是您正在做的事情。创建一个 test_project 目录。

https://github.com/mozilla/django-piston/tree/master/tests/test_project

我想如果它对于一些最大的 django 可插拔应用程序来说足够好的话,它对我来说已经足够好了。

于 2012-06-05T12:40:53.097 回答
1

当然,如果您不需要任何 django 依赖项,您可以使用独立的单元测试来测试 Python 部分

一个 Django 环境至少需要一个settings.pymanage.py文件。您可以仅使用基本内容设置它们,并使用 manage.py 对您的应用程序进行单元测试。您应该将项目视为 Django 运行时环境,没有它就没有 Django。您可能可以模仿设置,但您只会创造更多的技巧而不是简单。

于 2012-06-05T12:35:39.357 回答
0

您还可以创建自定义测试运行程序并覆盖它在其中搜索测试的路径。

也许我在这里埋葬了lede。我最近继承了一个项目,由于历史原因,他们想要保留遗留测试,所以我被迫将所有测试写在一个文件夹中并指向它

from django.test.runner import DiscoverRunner


class MyTestRunner(DiscoverRunner):
    
    def __init__(self, *args, **kwargs):
        kwargs.update({'top_level': str(settings.TEST_DISCOVER_TOP_LEVEL)})
        super().__init__(*args, **kwargs)

    def run_tests(self, test_labels, extra_tests=None, **kwargs):
        # In order to override the top_level directory, the test_label must match the top_level
        kwargs.update({'test_labels': [str(settings.TEST_DISCOVER_TOP_LEVEL)]})
        return super().run_tests(extra_tests=extra_tests, **kwargs)

并在您的设置中

TEST_RUNNER = 'path.to.my.module.MyTestRunner'

TEST_DISCOVER_TOP_LEVEL = BASE_DIR / 'tests/unit_and_integration_tests'
于 2021-04-21T06:39:19.100 回答