ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

包覆盖率

Sublime Text的单元测试和代码覆盖率测量包

标签 testing

详细

  • 1.1.1
  • github.com
  • github.com
  • 9年前
  • 3小时前
  • 9年前

安装

  • 总计 6K
  • Win 5K
  • Mac 833
  • Linux 291
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日 6月22日
Windows 2 3 1 1 1 1 1 2 3 0 0 0 1 1 1 1 0 5 6 1 1 1 5 1 0 2 4 4 4 1 2 2 1 2 1 0 4 1 3 1 0 4 0 0 0 2
Mac 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0

自述文件

源代码
raw.githubusercontent.com

包覆盖率

运行测试并报告测试覆盖率的Sublime Text包。

使用以下Python包,它们将通过Package Control依赖自动安装到Sublime Text中

  • unittest
  • coverage
  • sqlite3

任何包含dev/tests.py的包都可以用此包进行测试。可以通过该包创建并填充的SQLite数据库将来自多个机器和操作系统的覆盖率数据合并在一起。使用像Dropbox这样的解决方案来存储覆盖率数据库,可以实现无痛苦的覆盖率聚合和报告。

目录

安装

使用 Package Control

  1. 安装Package Control
  2. 从命令面板运行Package Control: Install Package命令
  3. 输入包覆盖率并选择包

设置

Package Coverage力求保持事情简单。它使用unittest模块来查找在包目录dev/tests.py中定义的所有测试类。

唯一的配置是您想要存储跟踪覆盖率结果的SQLite数据库的位置。最方便的选项之一是将它存储在Dropbox或Google Drive文件夹中,该文件夹可以在机器之间自动同步。

  1. 创建dev目录
  2. dev/tests.py中编写测试
  3. 创建dev/reloader.py

创建dev目录

在您的包目录根目录下,创建一个名为dev/的子目录。在dev/文件夹内部,创建一个名为__init__.py的文件,将dev/目录变为一个包。

dev/tests.py中编写测试

dev/tests.py文件应包含一个或多个unittest.TestCase类。由于dev是一个包,您可以在其他文件中创建测试类,然后使用相对导入将测试类导入到dev/tests.py中。

创建dev/reloader.py

对于Sublime Text包的迭代式开发,有必要确保在Sublime Text的Python解释器中运行最新的Python代码版本。

默认情况下,Sublime Text会自动重新加载任何位于包目录根部的以.py结尾的文件。虽然这种方法对于简单的包来说适用,但对于更复杂的包来说通常是不够的。

为了处理更复杂的包,创建一个名为dev/reloader.py的文件,并将其粘贴以下模板内容到其中

# coding: utf-8
from __future__ import unicode_literals, division, absolute_import, print_function

import sys


# The name of the package
pkg_name = 'My Package'

# A list of all python files in subdirectories, listed in their dependency order
pkg_files = [
    'subdir._types',
    'subdir._osx',
    'subdir._linux',
    'subdir._win',
    'subdir',
]

if sys.version_info >= (3,):
    from imp import reload
    prefix = pkg_name + '.'
else:
    prefix = ''

for pkg_file in pkg_files:
    pkg_file_path = prefix + pkg_file
    if pkg_file_path in sys.modules:
        reload(sys.modules[pkg_file_path])

使用

通过命令面板,Package Coverage提供了以下命令

运行测试

该命令会运行dev/tests.py中包含的测试,并将输出结果显示在Sublime Text底部的输出面板中。

使用快速面板提示用户选择要测试的包。测试将在后台线程中运行,这意味着无法访问sublime API。只有位于Packages/文件夹且文件名为dev/tests.py的包会被显示。

在UI线程中运行测试

运行测试相同,区别在于测试是在UI线程中运行的,允许访问sublime API。

按名称运行测试

运行测试相同,区别在于用户可以输入正则表达式来按名称过滤要运行的测试。

按名称在UI线程中运行测试

在UI线程中运行测试相同,区别在于用户可以输入正则表达式来按名称过滤要运行的测试。

测量覆盖率

该命令运行dev/tests.py中的测试并测量代码覆盖率。如果已设置数据库路径,则将结果保存到SQLite覆盖率数据库中。

使用快速面板提示用户选择要测试的包。测试将在后台线程中运行,这意味着无法访问sublime API。只有位于Packages/文件夹且文件名为dev/tests.py的包会被显示。

在UI线程中测量覆盖率

测量覆盖率相同,区别在于测试是在UI线程中运行的,允许访问sublime API。

使用HTML报告测量覆盖率

使用HTML报告测量覆盖率相同,区别在于除了输出面板外,还会生成并打开HTML报告,以便用户查看。

在UI线程中使用HTML报告测量覆盖率

使用HTML报告测量覆盖率相同,区别在于测试是在UI线程中运行的,允许访问sublime API。

设置数据库路径

提示用户输入保存覆盖率数据库的完整路径。这是一个用于从覆盖率结果生成HTML报告的SQLite数据库。

通过在同步文件系统(如Dropbox或Google Drive)中保存数据库,可以在生成HTML报告时使用来自不同操作系统的结果。

如果在一个打开的Sublime Text项目中设置了数据库路径,则数据库设置将被设置为项目文件中的项目设置。否则,数据库设置将是全局编辑器设置,并保存在Packages/User/Package Coverage.sublime-settings中。

只有完全干净的git仓库且无更改的测试结果会被保存到覆盖率数据库中。

显示报告

使用快速面板提示用户从覆盖率数据库中选择一个包含覆盖率结果的包。选择一个包后,用户将看到一个包含覆盖率结果的提交列表。选择一个提交将编译该提交的不同测试运行结果,生成HTML报告并在用户的默认Web浏览器中打开。

生成的报告放在dev/coverage_reports/目录中。建议使用.gitignore.hgignore忽略该目录。导出的报告不会自动清理,必须使用清理报告命令进行清理。

清理报告

使用快速面板提示用户具有在磁盘上保存已导出报告的软件包列表。当选择一个软件包时,所有报告都将被永久删除。