连续的单元的测试与Pydev(Python和日蚀)
-
06-07-2019 - |
题
有没有一种方式整合背景单元的测试,与Pydev蚀的环境?
我的单元测试运行良好,但是我想将它们运行的背景基于源文件中的变化(例如用鼻子),并将结果回到蚀(我在想红色大X当的测试失败,一个控制台和跟踪记录看)。
不,命令迅速运行的鼻子在边不计。
我有这次日食一体化在发展中退休的东西。
谢谢,
Tal。
编辑: 检查出新的Pydev(1.6.4) http://pydev.org/manual_adv_pyunit.html
解决方案
此功能已添加到PyDev 2.0.1中,并且可以选择在python文件更改时在上次测试运行中重新启动测试,还有一个选项可以仅重新运行错误 - 尽管它将运行完整测试套件,如果没有发现错误,因为我们的想法是你完成了你的错误,并且当所有传递完整套件的最后一次启动时(那么你可以继续进行另一项任务)。
目前的夜间版本已合并此功能。
其他提示
Pydev确实有一些单元测试集成,但这只是一个运行配置......所以......
这不是一种非常优雅的方式,但如果你:
- 启用项目 - >自动构建
- 在项目属性中,添加Program 类型的新构建器
- 将其配置为运行测试并选择“在自动构建期间” 醇>
然后至少你会得到一些东西,在资源保存时将测试结果输出到控制台。
我只是意识到,PyDev有而强大的脚本的支持。不幸的是我没有时间来做这一切对于你(但是,如果你完成这个请帖在这里:)
如果创建了一个文件命名为 pyedit_nose.py
看起来像这样在一个否则是空的文件夹:
assert cmd is not None
assert editor is not None
if cmd == 'onSave':
from java.lang import Runtime
from java.io import BufferedReader
from java.io import InputStreamReader
from org.eclipse.core.resources import ResourcesPlugin
from org.eclipse.core.resources import IMarker
from org.eclipse.core.resources import IResource
proc = Runtime.getRuntime().exec('ls -al')
extra_message = BufferedReader(InputStreamReader(proc.inputStream)).readLine()
r = ResourcesPlugin.getWorkspace().getRoot()
for marker in r.findMarkers(IMarker.PROBLEM, False, IResource.DEPTH_INFINITE):
if marker.getAttribute(IMarker.MESSAGE).startsWith("Some test failed!"):
marker.delete()
for rr in r.getProjects():
marker = rr.createMarker(IMarker.PROBLEM)
marker.setAttribute(IMarker.MESSAGE, "Some test failed! " + extra_message)
marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH)
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR)
并且设置了偏好->PyDev->脚本Pydev指向这个目录,你会得到所有项目在你的工作空间的标记为错误的每一次的文件是保存。
通过执行一个脚本,返回的试验结果,在一些容易分析的格式,而不是 ls
和解析出你应该能把你的标记在正确的地方。
看到这些起始点:
- Script脚本Pydev
- IMarker 是什么表示的标记。
- IResource 为什么你将你的标记。可以工作空间项目、文件、目录等。
resource.createMarker(IMarker.PROBLEM)
创建一个问题的标记。 - IProject 是一种类型的
IResource
这表示一个项目。使用members()
方法获取的内容。
我第一次手动运行测试(运行>运行方式> Python单元测试)。在那之后,我用
Ctrl + Shift + F9
保存文件并执行测试,而不是使用 Ctrl + S
保存,并期待发生一些魔术。
Ctrl + Shift + F9
组合键重新启动上次运行配置。
免责声明:我是Eclipse和PyDev的新手,所以我可能会建议一些愚蠢/明显/错误的东西
我强化了“多管闲事”脚本自动构建文档并运行测试 不断。没什么了不起的,但是完成了工作。因为原来在这里发布 链接断了。与原始的nosy脚本不同,这个脚本以递归方式扫描目录 并允许寻找多种模式。
import os
import os.path
import sys
import stat
import time
import subprocess
from fnmatch import fnmatch
def match_patterns(pathname, patterns):
"""Returns True if the pathname matches any of the given patterns."""
for pattern in patterns:
if fnmatch(pathname, pattern):
return True
return False
def filter_paths(pathnames, patterns=["*"], ignore_patterns=[]):
"""Filters from a set of paths based on acceptable patterns and
ignorable patterns."""
result = []
if patterns is None:
patterns = []
if ignore_patterns is None:
ignore_patterns = []
for path in pathnames:
if match_patterns(path, patterns) and not match_patterns(path, ignore_patterns):
result.append(path)
return result
def absolute_walker(path, recursive):
if recursive:
walk = os.walk
else:
def walk(path):
return os.walk(path).next()
for root, directories, filenames in walk(path):
yield root
for directory in directories:
yield os.path.abspath(os.path.join(root, directory))
for filename in filenames:
yield os.path.abspath(os.path.join(root, filename))
def glob_recursive(path, patterns=["*"], ignore_patterns=[]):
full_paths = []
for root, directories, filenames in os.walk(path):
for filename in filenames:
full_path = os.path.abspath(os.path.join(root, filename))
full_paths.append(full_path)
filepaths = filter_paths(full_paths, patterns, ignore_patterns)
return filepaths
def check_sum(path='.', patterns=["*"], ignore_patterns=[]):
sum = 0
for f in glob_recursive(path, patterns, ignore_patterns):
stats = os.stat(f)
sum += stats[stat.ST_SIZE] + stats[stat.ST_MTIME]
return sum
if __name__ == "__main__":
if len(sys.argv) > 1:
path = sys.argv[1]
else:
path = '.'
if len(sys.argv) > 2:
command = sys.argv[2]
else:
command = "make -C docs html; bin/python tests/run_tests.py"
previous_checksum = 0
while True:
calculated_checksum = check_sum(path, patterns=['*.py', '*.rst', '*.rst.inc'])
if calculated_checksum != previous_checksum:
previous_checksum = calculated_checksum
subprocess.Popen(command, shell=True)
time.sleep(2)
希望这有帮助。
=)
我使用 Nosy (可在pypi上找到):
每当源文件运行nose测试发现和执行工具 改变了。