运行mccabe代码复杂性检查器的pytest插件。

pytest-mccabe的Python项目详细描述


pytest mccabe

https://travis-ci.org/The-Compiler/pytest-mccabe.svg?branch=master< Py.Puthon插件用于检查Python源的循环复杂性 mccabe

使用量

安装方式:

pip install pytest-mccabe

如果您随后键入:

py.test --mccabe

.py结尾的每个文件都将被发现并在mccabe中运行, 从命令行参数开始。

简单用法示例

假设您有这个(故意错误和复杂的)代码:

# module.py

import random
import os.path

def some_function():
    num = random.random()
    if 0 <= num < 0.1:
        print("1")
    elif 0.1 <= num < 0.2:
        print("2")
    elif 0.2 <= num < 0.3:
        print("3")
    elif 0.3 <= num < 0.4:
        print("4")
    elif 0.4 <= num < 0.5:
        print("5")
    elif 0.5 <= num < 0.6:
        print("6")
    elif 0.6 <= num < 0.7:
        print("7")
    elif 0.7 <= num < 0.8:
        print("8")
    elif 0.8 <= num < 0.9:
        print("9")
    elif 0.9 <= num < 1:
        print("10")

在安装了py test mccabe的情况下运行py.test将显示此函数是 被认为过于复杂:

$ py.test -q --mccabe module.py
F
============================== FAILURES ==============================
____________________________ mccabe-check ____________________________
.../module.py:4: C901 'some_function' is too complex (11)

配置每个项目的McCabe复杂性和文件<>你可以为你的项目配置最大的复杂性 通过将mccabe-complexity条目添加到pytest配置文件(例如 setup.cfg)像这样:

[pytest]
mccabe-complexity=15

使用上面的示例重新运行会更好:

$ py.test -q --mccabe foo.py
.
1 passed in 0.00 seconds

如果您有一些文件要设置比 项目范围1,您可以启动一个具有复杂模式的复杂行:

[pytest]
mccabe-complexity =
    *.py 7
    magic.py 10

忽略某些函数

可以通过添加注释来排除某些函数的复杂性检查 像这样:

def some_function():  # noqa
    ...

def another_function():  # pragma: no mccabe
    ...

(两者都能工作-# noqa主要用于flake8兼容性)

运行McCabe检查,无其他测试

您可以将测试运行限制为仅执行“mccabe”测试 而不是通过键入:

py.test --mccabe -m mccabe

这将只运行标有“mccabe”关键字的测试 这是为这个插件添加的mccabe测试项添加的。

如果使用的是pytest<;2.4,则使用以下调用 效果相同:

py.test --mccabe -k mccabe

注释

此插件的存储库位于https://github.com/The-Compiler/pytest-mccabe

有关py.test的更多信息,请参见http://pytest.org

代码基于Florian Schulze的优秀pytest-flakes-谢谢!

更改

0.1

  • 初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java找不到当前线程的会话   同步Java同步方法调用非同步方法   这段代码的java时间复杂度是如何列出一个集合的所有子集的?   java Jetty SslConnectionFactory nextProtocol   为什么在java集合中使用游标而不是for循环   java如何对长函数进行单元测试?   如何从java中的文本输入创建数组   java工具栏内容未显示,尽管出现了片段内容   java MediaPlayer无法处理本地文件   java在多次读取时,从TCP服务器读取的数据将挂起   java组织。springframework。数据领域无法将PageImpl强制转换为   java如何使用@WithMockUser并从属性文件中传递用户名和密码?   JavaSpringBootGradle插件2。x如何使用自定义启动器布局工厂   sockets Java客户端和服务器之间使用字符串等进行通信的“行业标准”方法是什么   java变量引用不存在的资源:${project\u loc:project\u name}   搜索如何返回LDAP Java中所有用户的特定属性?   JDK1.8.016x的java密钥斗篷代理问题   spring如何使用Java中的Exchange获取邮件   java Kotlin+Dagger 2:Dagger*文件不会生成   如何在传入的double上执行操作,然后在Java中返回