如何在Django中测试单个应用程序(而不是项目)?

时间:2012-06-05 12:12:59

标签: django testing

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

5 个答案:

答案 0 :(得分:6)

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

python manage.py test app.tests:TestClassHere

测试单个应用程序。我只是遵循其他大型django项目的惯例,这正是你正在做的事情。创建一个test_project目录。

https://bitbucket.org/jespern/django-piston/src/7c90898072ce/tests/test_project

我觉得它对于一些最大的django可插拔应用程序是否足够好,对我来说还不错。

答案 1 :(得分:5)

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

From the docs

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

Project dir/
    /myapp
    /myotherapp
    /myproject

Django允许您仅从" myotherapp"执行测试执行:

./manage.py test myotherapp/

这将执行" myotherapp"下的所有测试。而

./manage.py test 

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

答案 2 :(得分:3)

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

Django自己的runtests.py是一个很好的参考,但我发现大多数情况都令人费解。以下是几个替代示例:

答案 3 :(得分:1)

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

Django环境至少需要 settings.py manage.py 文件。您可以只使用基本内容设置这些内容,并使用manage.py设置您的应用程序。您应该将项目视为Django运行时环境,没有它就没有Django。你可以模仿设置,但是你会创造更多的黑客而不是简单。

答案 4 :(得分:0)

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

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

UserManager

并在您的设置中

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)