Pregunta

¿Hay alguna forma de integrar pruebas de unidad de fondo con el entorno Pydev Eclipse?

Las pruebas de mi unidad funcionan bien, pero me gustaría integrarlas para que se ejecuten en segundo plano según los cambios en el archivo de origen (por ejemplo, con nariz) e integrar el resultado de nuevo en Eclipse (estoy pensando en una gran X roja cuando las pruebas fallan con una consola y vista de registro de seguimiento).

No, un símbolo del sistema que se ejecuta en el lateral no cuenta.

He tenido esta integración de Eclipse al desarrollar material RoR.

Gracias,

Tal.

EDITAR: Vea el nuevo Pydev (1.6.4) http: // pydev .org / manual_adv_pyunit.html

¿Fue útil?

Solución

Esta función se ha agregado a PyDev 2.0.1 con una opción para relanzar las pruebas en la última ejecución de prueba cada vez que cambia un archivo de Python, con una opción adicional para volver a ejecutar solo los errores, aunque ejecutará la prueba completa suite si no se encontraron errores, ya que la idea es que trabaje con sus errores y cuando todos pasen un lanzamiento final para toda la suite (entonces puede pasar a otra tarea).

La compilación nocturna actual tiene esta característica incorporada.

Imagen con nueva acción

Otros consejos

Pydev tiene alguna integración de prueba unitaria, pero eso es solo como una configuración de ejecución ... así que ...

Esta no es una forma muy elegante, pero si usted:

  1. Habilitar proyecto- > Construir automáticamente
  2. En las propiedades de su proyecto, agregue un nuevo generador de tipo Programa
  3. Configúrelo para ejecutar sus pruebas y seleccione 'durante las compilaciones automáticas'

Entonces, al menos, obtendrá algo que arroje los resultados de la prueba a la consola al guardar los recursos.

Me acabo de dar cuenta de que PyDev tiene un soporte de script bastante poderoso. Lamentablemente, no tengo tiempo para hacerlo todo por usted (pero si completa esto, publíquelo aquí :)

Si crea un archivo llamado pyedit_nose.py que se ve así en una carpeta vacía:

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)

y configure Preferencias- > PyDev- > Scripting Pydev para apuntar a este directorio obtendrá todos los proyectos en su espacio de trabajo marcados con un error cada vez que se guarde un archivo.

Al ejecutar un script que devuelve los resultados de la prueba en un formato fácil de analizar en lugar de ls y analizar el resultado, debería poder colocar sus marcadores en los lugares correctos.

Vea esto para algunos puntos de partida:

  • Scripting Jython en Pydev
  • IMarker es lo que representa un marcador.
  • IResource es a lo que adjunta sus marcadores. Pueden ser espacios de trabajo, proyectos, archivos, directorios, etc. resource.createMarker (IMarker.PROBLEM) crea un marcador de problema.
  • IProject es un tipo de IResource que representa un proyecto. Use el método members () para obtener el contenido.

Ejecuto la prueba a mano la primera vez ( Ejecutar > Ejecutar como > Prueba de unidad de Python ). Después de eso, yo uso Ctrl + Shift + F9 para guardar los archivos y ejecutar las pruebas, en lugar de guardar con Ctrl + S y esperar que ocurra algo de magia.

La combinación de teclas Ctrl + Shift + F9 relanza la última configuración de ejecución.

Descargo de responsabilidad : Soy nuevo en Eclipse y PyDev, por lo que puedo estar sugiriendo algo tonto / obvio / incorrecto

Mejoré el "curioso" script para construir automáticamente documentación y ejecutar pruebas continuamente. Nada estelar, pero hace el trabajo. Publicarlo aquí porque el original El enlace se cayó. A diferencia del script curioso original, este escanea el directorio de forma recursiva y permite buscar múltiples patrones.

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)

Espero que esto ayude.

=)

Uso Nosy (disponible en pypi):

  

Ejecute la herramienta de detección y ejecución de prueba de nariz cada vez que un archivo fuente   ha cambiado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top