python - Coverage.py 无法发现子目录中没有 init.py 文件的测试

标签 python python-3.x init coverage.py

当我运行 python 覆盖率时,我总是需要在测试子目录中有一个空的 __init__.py 文件来获取运行测试的覆盖率。这是 python2 软件包的要求,但不是 python3 的要求。为了重现,我执行了以下操作(先决条件是 python3、pip3 和 brew):

  1. 运行以下终端命令:

    pip3 install coverage
    
  2. 创建以下目录结构:

    example\
        example.py
    tests\
        test_example.py
    

示例.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
    
  • 我应该得到:在 x.yz 秒内运行 1 次测试,但我总是得到在 x.yz 秒内运行 0 次测试,为了解决这个问题,我有将 __init__.py 文件添加到两个目录中。如何在不需要初始化文件的情况下运行覆盖范围?

    如果您需要我提供有关此问题的其他信息,请告诉我。我将不胜感激任何帮助!

    最佳答案

    虽然Python 3不需要__init__.py文件,省略它们会创建 namespace 包,如果不需要它们,这不是一个好主意。例如,它们是最后读取的,因此即使 PYTHONPATH 中较晚的目录也可以隐藏您的文件。

    您应该创建__init__.py无论如何,文件。

    关于python - Coverage.py 无法发现子目录中没有 init.py 文件的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47640812/

    相关文章:

    python - 如何使用 pandas 按组减去基于数据的列的行?

    python - 变换/扭曲坐标

    python - 在 flask-reSTLess 预处理器中访问请求 header

    Mysql:如何在 init_connect 变量中正确设置过程调用

    ios - 打开带有对象的 View

    python - flask 异常 "View function mapping is overwriting an existing endpoint function"

    python - 检查一个数据帧中的值是否存在于另一个数据帧中,打印所有值对

    python - 在 anaconda 中更新 Spyder 后出现内核错误

    python-3.x - 在 python 3 中请求 HTTP/2 切换协议(protocol)

    Python 打印对象地址而不是值