gpt4 book ai didi

python - 无法通过 Hitchhiker's Guide To Python Method 创建 Python 项目测试

转载 作者:行者123 更新时间:2023-12-04 15:13:06 25 4
gpt4 key购买 nike

我正在尝试通过方法 described in The Hitchhiker's Guide To Python 构建一个项目.我遇到了测试结构的问题。
我的文件结构如下所示:

.
├── __init__.py
├── sample
│   ├── __init__.py
│   └── core.py
├── setup.py
└── tests
├── __init__.py
├── context.py
└── test_core.py
和:
# sample/core.py

class SampleClass:
def got_it(self):
return True
和:
# tests/context.py

import os
import sys
sys.path.insert(0, os.path.abspath(
os.path.join(os.path.dirname(__file__), '..')
))

import sample
和:
# tests/test_core.py

import unittest

from .context import sample


class SampleClassTest(unittest.TestCase):
def test_got_it(self):
# ...
pass

if __name__ == '__main__':
unittest.main()
(请注意,我只是通过根目录中的 __init__.py 文件进行测试,看看是否有帮助,但没有。)
当我尝试运行时 tests/test_core.py使用 Python 3.7。我收到此错误:
ImportError: attempted relative import with no known parent package
如果我从测试目录外部或其中运行测试文件,就会发生这种情况。
如果我远程 .并在tests/test_core.py中执行此操作:
from context import sample
一切都加载了,但我无法访问 SampleClass .
我尝试过的事情是:
sc = SampleClass()
NameError: name 'SampleClass' is not defined

sc = sample.SampleClass()
AttributeError: module 'sample' has no attribute 'SampleClass'

sc = sample.core.SampleClass()
AttributeError: module 'sample' has no attribute 'core'

sc = core.SampleClass()
NameError: name 'core' is not defined
我也尝试过 Python 2 并遇到了类似的问题(错误方法略有不同)。我还尝试调用函数而不是类,并且在那里也遇到了类似的问题。
有人可以指出我做错的方向吗?

最佳答案

这曾经让我有些头疼,直到我意识到这只是取决于测试开始的方式。如果您使用 python tests/test_core.py ,那么您将在任何包之外启动一个简单的脚本。所以禁止相对进口。
但是如果(仍然来自项目根文件夹)您使用:

python -m tests.test_core
那么你正在启动模块 test_core来自 tests包,并且允许相对导入。
从那时起,我总是以模块而不是脚本的形式开始我的测试。更好的是 unittest discover 知道包。因此,如果您在使用初始 test 命名测试文件夹和脚本时保持一致。 ,您可以忘记测试次数,只需使用:
python -m unittest discover
这足以运行整个测试套件。
测试愉快!

关于python - 无法通过 Hitchhiker's Guide To Python Method 创建 Python 项目测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64849971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com