使用Pydev进行连续单元测试(Python和Eclipse)

Tal*_*iss 43 python unit-testing pydev

有没有办法将背景单元测试与Pydev Eclipse环境集成?

我的单元测试运行良好,但我希望将它们集成到基于源文件更改的后台运行(例如使用nose)并将结果集成回Eclipse(当测试使用控制台失败时,我正在考虑大红色X和跟踪日志视图).

不,在侧面运行鼻子的命令提示符不计算在内.

我在开发RoR时已经有了这个Eclipse集成.

谢谢,

塔尔.

编辑:查看新的Pydev(1.6.4)http://pydev.org/manual_adv_pyunit.html

Fab*_*zny 35

这个功能已被添加到PyDev 2.0.1中,并且可以选择在python文件更改时在上次测试运行中重新启动测试,还有一个选项可以仅重新运行错误 - 尽管如果没有,它将运行完整的测试套件发现错误,因为这个想法是你完成了你的错误,当所有通过整个套件的最终发布完成后(然后你可以继续进行另一个任务).

目前的每晚构建都包含此功能.

带有新动作的图片

  • 在您释放之前是否会修复错字?:)('背景').此外,我建议重新启动'在背景重新启动,仅运行失败的测试'以避免重复,但语法正确,'重新启动'. (4认同)

Hen*_*son 9

Pydev确实有一些单元测试集成,但这只是一个运行配置...所以......

这不是一个非常优雅的方式,但如果你:

  1. 启用项目 - >自动构建
  2. 在项目属性中,添加Program类型的新构建器
  3. 配置它以运行测试并选择"在自动构建期间"

然后至少你会得到一些东西,在资源保存时将测试结果输出到控制台.


Hen*_*son 5

我刚刚意识到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)
Run Code Online (Sandbox Code Playgroud)

并设置Preferences-> PyDev-> Scripting Pydev指向此目录,每次保存文件时,您将获得工作区中标记为错误的所有项目.

通过执行一个脚本,以一些易于解析的格式返回测试结果而不是ls解析输出,您应该能够将标记放在正确的位置.

看一下这个起点:

  • 在Pydev中使用Jython脚本
  • IMarker代表了一种标记.
  • IResource是您附加标记的内容.可以是工作空间,项目,文件,目录等resource.createMarker(IMarker.PROBLEM)创建问题标记.
  • IProject是一种IResource代表项目的类型.使用该members()方法获取内容.