Coverage.py 不会发现子目录中没有 init.py 文件的测试
Coverage.py does not discover tests without init.py file in sub directories
当我 运行 覆盖 python 时,我总是需要在测试子目录中有一个空的 __init__.py
文件来覆盖 运行 测试。这是 python2 软件包的要求,而不是 python3 的要求。为了重现,我做了以下操作(先决条件是 python3、pip3 和 brew):
运行以下终端命令:
pip3 install coverage
创建以下目录结构:
example\
example.py
tests\
test_example.py
example.py:
#!/usr/bin/env python3
class Example:
value = 3
def update(self):
self.value = 4
test_example.py:
#!/usr/bin/env python3
import unittest
from example.example import Example
class TestExample(unittest.TestCase):
def test_example(self):
example_object = Example()
self.assertEqual(3, example_object.value)
example_object.update()
self.assertEqual(4, example_object.value)
运行以下终端命令:
coverage run --branch -m unittest discover -s . && coverage report
我应该得到:Ran 1 test in x.yz seconds
,但我总是得到 Ran 0 tests in x.yz seconds
,要解决这个问题,我必须将 __init__.py
文件添加到两个目录。我怎样才能 运行 覆盖而不需要初始化文件?
如果您需要我提供有关此问题的任何其他信息,请告诉我。如果有任何帮助,我将不胜感激!
尽管 Python 3 不需要 __init__.py
文件,省略它们会创建命名空间包,如果您不需要它们,这不是一个好主意。例如,它们是最后读取的,因此即使是 PYTHONPATH 后面的目录也可以隐藏您的文件。
无论如何您都应该创建 __init__.py
个文件。
必须指定从顶部到测试文件夹的确切路径。
例如:'python3 -m unittest discover src/main/python/tests'
这很可能是 'unittest discovery' 的错误,当您明确指定命名空间包作为发现目标时,发现会起作用。
但它不会递归到 namespace_pkg 内的任何命名空间包中。因此,当您简单地 运行 'python3 -m unittest discover' 它不会进入 cwd.
中的所有命名空间包(基本上是文件夹)下
一些 PR(例如:issue35617)正在修复此问题,但尚未发布
当我 运行 覆盖 python 时,我总是需要在测试子目录中有一个空的 __init__.py
文件来覆盖 运行 测试。这是 python2 软件包的要求,而不是 python3 的要求。为了重现,我做了以下操作(先决条件是 python3、pip3 和 brew):
运行以下终端命令:
pip3 install coverage
创建以下目录结构:
example\ example.py tests\ test_example.py
example.py:
#!/usr/bin/env python3
class Example:
value = 3
def update(self):
self.value = 4
test_example.py:
#!/usr/bin/env python3
import unittest
from example.example import Example
class TestExample(unittest.TestCase):
def test_example(self):
example_object = Example()
self.assertEqual(3, example_object.value)
example_object.update()
self.assertEqual(4, example_object.value)
运行以下终端命令:
coverage run --branch -m unittest discover -s . && coverage report
我应该得到:Ran 1 test in x.yz seconds
,但我总是得到 Ran 0 tests in x.yz seconds
,要解决这个问题,我必须将 __init__.py
文件添加到两个目录。我怎样才能 运行 覆盖而不需要初始化文件?
如果您需要我提供有关此问题的任何其他信息,请告诉我。如果有任何帮助,我将不胜感激!
尽管 Python 3 不需要 __init__.py
文件,省略它们会创建命名空间包,如果您不需要它们,这不是一个好主意。例如,它们是最后读取的,因此即使是 PYTHONPATH 后面的目录也可以隐藏您的文件。
无论如何您都应该创建 __init__.py
个文件。
必须指定从顶部到测试文件夹的确切路径。 例如:'python3 -m unittest discover src/main/python/tests'
这很可能是 'unittest discovery' 的错误,当您明确指定命名空间包作为发现目标时,发现会起作用。
但它不会递归到 namespace_pkg 内的任何命名空间包中。因此,当您简单地 运行 'python3 -m unittest discover' 它不会进入 cwd.
中的所有命名空间包(基本上是文件夹)下一些 PR(例如:issue35617)正在修复此问题,但尚未发布