【发布时间】:2019-09-01 09:17:17
【问题描述】:
使用 DJango/Python 3.7。我在这里读到——How do I run all Python unit tests in a directory? 我可以使用“发现”命令在指定目录中查找测试。我想要一个“测试”文件夹,所以我创建了一个然后运行
(venv) localhost:myproject davea$ python -m unittest discover tests
Traceback (most recent call last):
File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/__main__.py", line 18, in <module>
main(module=None)
File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/main.py", line 100, in __init__
self.parseArgs(argv)
File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/main.py", line 124, in parseArgs
self._do_discovery(argv[2:])
File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/main.py", line 244, in _do_discovery
self.createTests(from_discovery=True, Loader=Loader)
File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/main.py", line 154, in createTests
self.test = loader.discover(self.start, self.pattern, self.top)
File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/loader.py", line 344, in discover
raise ImportError('Start directory is not importable: %r' % start_dir)
ImportError: Start directory is not importable: 'tests'
这对我来说很奇怪,因为我有一个(空的)初始化文件...
(venv) localhost:myproject davea$ ls web/tests/
__init__.py model_tests.py
我还需要做什么才能让我的测试目录被识别?
编辑:下面是model_tests.py的内容...
from django.conf import settings
from django.test import TestCase
from django.core import management
def setup():
print("setup")
management.call_command('loaddata', 'test_data.yaml', verbosity=0)
def teardown():
management.call_command('flush', verbosity=0, interactive=False)
class ModelTest(TestCase):
# Verify we can correctly calculate the amount of taxes when we are working
# with a state whose tax rates are defined in our test data
def test_calculate_tax_rate_for_defined_state(self):
state = "MN"
income = 30000
taxes = IndividualTaxBracket.objects.get_taxes_owed(state, income)
print(taxes)
self.assertTrue(taxes > 0, "Failed to calucate taxes owed properly.")
【问题讨论】:
-
您的
tests目录位于web目录中,因此您可能需要在运行命令之前cd 进入该目录。 -
您是否忘记了一个空的“tests.py”文件作为“tests”文件夹的同级文件?
-
@MarioOrlandi,我确实在“tests”旁边有一个“tests.py”文件,这导致了一些错误,所以我继续删除了它。但是我仍然无法运行测试或仅针对 model_tests.py 中的测试。
-
戴夫,有几个问题是有序的......我会添加一个更好的文本格式的答案......
标签: django python-3.x unit-testing testing