Django/unittest 运行命令测试结束运行ner
Django/unittest run command at the end of the test runner
我正在使用 Django 测试 运行ner 来 运行 我的单元测试。其中一些测试使用在我的本地系统上创建大量文件的工厂。它们都有一个可检测的名称,并且可以相当容易地删除。
我正在努力避免
- 保留文件删除 cron 作业 运行ning
- 如果检测到我们正在测试,请更改我的自定义图像模型的代码以删除该文件。相反,我想在测试结束时有一个命令 运行 一次(并且只有一次) 运行 清理测试生成的所有文件。
我写了一个小的管理命令来删除符合预期约定的文件。有没有一种方法可以在完成整个测试套件后对 运行ner 运行 call_command
进行测试(而不仅仅是在 tearDown
或 tearDownClass
特定测试的方法)?
如果您在与models.py相同的文件夹中创建一个services.py文件,您可以将清理代码放在那里,然后从管理命令和测试拆解中调用它,同时保留它干
您也许可以利用 django 测试运行器命令测试的方式(参见 https://docs.djangoproject.com/en/1.11/topics/testing/overview/#order-in-which-tests-are-executed)
如果您的测试用例继承自 django 的 TestCase class,您可以创建一个直接继承自 unittest.TestCase 的虚拟清理测试用例。测试运行程序将最后执行,您可以在那里进行清理。
但是,如果 Django 开发人员决定更改测试顺序,这将会中断。
所以我们最终做的是通过将以下行添加到 settings.py 来创建自定义测试运行程序:
TEST_RUNNER = 'myapp.test_runner.MyTestRunner'
然后在测试运行器中,我们从继承自现有 juno 测试运行器的测试运行器的 "teardown_test_environment" 方法中删除图像。
import os
import shutil
from django.conf import settings
from junorunner.testrunner import TestSuiteRunner
class MyTestRunner(TestSuiteRunner):
def teardown_test_environment(self, *args, **kwargs):
# Remove test-created media files
if all([
os.path.isdir(settings.MEDIA_ROOT),
'test' in settings.MEDIA_ROOT,
]):
shutil.rmtree(settings.MEDIA_ROOT)
super(MyTestRunner, self).teardown_test_environment(*args, **kwargs)
此方法在测试方法的拆卸时调用,似乎是确保它在最后调用一次且仅调用一次的好地方。
我正在使用 Django 测试 运行ner 来 运行 我的单元测试。其中一些测试使用在我的本地系统上创建大量文件的工厂。它们都有一个可检测的名称,并且可以相当容易地删除。
我正在努力避免
- 保留文件删除 cron 作业 运行ning
- 如果检测到我们正在测试,请更改我的自定义图像模型的代码以删除该文件。相反,我想在测试结束时有一个命令 运行 一次(并且只有一次) 运行 清理测试生成的所有文件。
我写了一个小的管理命令来删除符合预期约定的文件。有没有一种方法可以在完成整个测试套件后对 运行ner 运行 call_command
进行测试(而不仅仅是在 tearDown
或 tearDownClass
特定测试的方法)?
如果您在与models.py相同的文件夹中创建一个services.py文件,您可以将清理代码放在那里,然后从管理命令和测试拆解中调用它,同时保留它干
您也许可以利用 django 测试运行器命令测试的方式(参见 https://docs.djangoproject.com/en/1.11/topics/testing/overview/#order-in-which-tests-are-executed)
如果您的测试用例继承自 django 的 TestCase class,您可以创建一个直接继承自 unittest.TestCase 的虚拟清理测试用例。测试运行程序将最后执行,您可以在那里进行清理。
但是,如果 Django 开发人员决定更改测试顺序,这将会中断。
所以我们最终做的是通过将以下行添加到 settings.py 来创建自定义测试运行程序:
TEST_RUNNER = 'myapp.test_runner.MyTestRunner'
然后在测试运行器中,我们从继承自现有 juno 测试运行器的测试运行器的 "teardown_test_environment" 方法中删除图像。
import os
import shutil
from django.conf import settings
from junorunner.testrunner import TestSuiteRunner
class MyTestRunner(TestSuiteRunner):
def teardown_test_environment(self, *args, **kwargs):
# Remove test-created media files
if all([
os.path.isdir(settings.MEDIA_ROOT),
'test' in settings.MEDIA_ROOT,
]):
shutil.rmtree(settings.MEDIA_ROOT)
super(MyTestRunner, self).teardown_test_environment(*args, **kwargs)
此方法在测试方法的拆卸时调用,似乎是确保它在最后调用一次且仅调用一次的好地方。