run*_*ace 4 python django unit-testing
我正在为各种自定义发行版使用单个 django。我找到了一个解决方案,其中每个发行版独有的应用程序都位于 django 项目文件夹之外(我们称之为DIR/),并DIR/使用如何将所有 django 应用程序保留在特定文件夹中 (添加到sys.path)将其添加到 Django 路径
之外。路径解决方案)
该项目运行,但是现在它没有发现测试。在将应用程序移出 Django 项目文件夹之前,我可以简单地运行所有测试:
manage.py test
Run Code Online (Sandbox Code Playgroud)
但是,现在没有找到测试。除了添加DIR/到 settings.py 之外,我还尝试将其添加到 manage.py 并且没有帮助。通过阅读 django 文档,我发现我可以指定一个这样的模块:
manage.py test app_name.tests
Run Code Online (Sandbox Code Playgroud)
以上工作,但对许多应用程序是不切实际的。如何添加用于搜索测试的路径?
我读了这个,但它只描述了问题,而不是解决方案: Django test runner not found tests
请求我的项目结构:
somefolder/
|-- dist/
| |-- dist1/apps/
| | |---- app11/
| | '---- app12/
| |
| '-- dist2/apps/
| |---- app21/
| '---- app22/
|-- src/
|-- manage.py
|-- project/settings.py
|-- appA/
'-- appB/
Run Code Online (Sandbox Code Playgroud)
由于询问已经发现这有效(不理想):
manage.py test app11 app12 app21 app22 --keepdb
Run Code Online (Sandbox Code Playgroud)
关键是__init__py在你的dist,dist/dist1和dist/dist1/apps目录中添加一些空文件。
我只是尝试将一个具有以下结构的玩具项目放在一起:
.
??? dist
? ??? dist1
? ? ??? apps
? ? ? ??? app_external
? ? ? ? ??? admin.py
? ? ? ? ??? apps.py
? ? ? ? ??? __init__.py
? ? ? ? ??? migrations
? ? ? ? ? ??? __init__.py
? ? ? ? ??? models.py
? ? ? ? ??? tests.py
? ? ? ? ??? views.py
? ? ? ??? __init__.py
? ? ??? __init__.py
? ??? __init__.py
??? src
??? app_internal
? ??? admin.py
? ??? apps.py
? ??? __init__.py
? ??? migrations
? ? ??? __init__.py
? ??? models.py
? ??? tests.py
? ??? views.py
??? manage.py
??? project
??? __init__.py
??? settings.py
??? urls.py
??? wsgi.py
Run Code Online (Sandbox Code Playgroud)
请注意,__init__.py在dist/. 这就是使每个目录成为Python 包并使 Python 测试机器在这些目录中查找测试的原因。
另请注意,我有一个名为的内部应用程序app_internal和一个app_external在与您类似的目录结构中调用的外部应用程序。
无论是app_internal和app_external有一个假的测试tests.py文件。
app_external/tests.py 内容:
from django.test import TestCase
class ExternalTestCase(TestCase):
def test_fake(self):
self.assertTrue(False)
Run Code Online (Sandbox Code Playgroud)
app_internal/tests.py 内容:
from django.test import TestCase
class InternalTestCase(TestCase):
def test_fake(self):
self.assertTrue(True)
Run Code Online (Sandbox Code Playgroud)
这里我们期望app_external测试会失败,而app_internal测试会成功。
我可以app_internal通过给出通常的命令来调用测试:
$ ./manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)
我可以app_external通过给出以下命令来调用测试:
$ ./manage.py test ..
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
F
======================================================================
FAIL: test_fake (dist.dist1.apps.app_external.tests.ExternalTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/augusto/develop/apps_outside/dist/dist1/apps/app_external/tests.py", line 10, in test_fake
self.assertTrue(False)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures=1)
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)
注意我..是如何将参数作为参数传递给测试命令的。
这指向相对于 的父目录src/,因此它会找到该dist包以及其中的所有其他包。我希望这会在您的dist/目录下找到所有测试。
我还可以通过给出以下命令同时运行所有内部和外部测试:
$ ./manage.py test . ..
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.F
======================================================================
FAIL: test_fake (dist.dist1.apps.app_external.tests.ExternalTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/augusto/develop/apps_outside/dist/dist1/apps/app_external/tests.py", line 10, in test_fake
self.assertTrue(False)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)
我使用 Django 1.11.23 和 Python 2.7.12 对此进行了测试。
| 归档时间: |
|
| 查看次数: |
1151 次 |
| 最近记录: |