Question

Existe-t-il un moyen d'intégrer les tests unitaires en arrière-plan à l'environnement Pydev Eclipse?

Mes tests unitaires fonctionnent bien, mais je voudrais les intégrer pour qu'ils fonctionnent en arrière-plan en fonction des modifications du fichier source (par exemple avec le nez) et pour intégrer le résultat dans Eclipse (je pense à un grand X rouge lorsque les tests échouent avec une console et un journal de trace).

Non, une invite de commande qui coule sur le côté ne compte pas.

J'ai eu cette intégration Eclipse lors du développement de produits RoR.

Merci,

Tal.

MODIFIER: Découvrez le nouveau fichier Pydev (1.6.4) http: // pydev .org / manual_adv_pyunit.html

Était-ce utile?

La solution

Cette fonctionnalité a été ajoutée à PyDev 2.0.1 avec une option permettant de relancer les tests lors du dernier test exécuté chaque fois qu'un fichier python est modifié, avec une option supplémentaire permettant de réexécuter uniquement les erreurs - bien que le test complet soit exécuté. suite si aucune erreur n’a été trouvée, car l’idée est que vous travailliez sur vos erreurs et que, lorsque tous réussissaient, le lancement final de la suite était terminé (vous pouvez alors passer à une autre tâche).

Cette fonctionnalité nocturne est intégrée à la version nocturne actuelle.

Image avec une nouvelle action

Autres conseils

Pydev a une certaine intégration de test unitaire, mais ce n'est qu'une configuration d'exécution ... donc ...

Ce n’est pas très élégant, mais si vous:

  1. Activer le projet - > Construire automatiquement
  2. Dans les propriétés de votre projet, ajoutez un nouveau générateur de type programme
  3. .
  4. Configurez-le pour exécuter vos tests et sélectionnez "lors de la génération automatique"

Au moins, vous obtiendrez quelque chose qui affiche les résultats du test sur la console lors de la sauvegarde des ressources.

Je viens de me rendre compte que PyDev dispose d'un support de script assez puissant. Malheureusement, je n'ai pas le temps de tout faire pour vous (mais si vous complétez ceci, merci de le poster ici:)

Si vous créez un fichier nommé pyedit_nose.py , qui ressemble à ceci dans un dossier vide par ailleurs:

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)

et configurez Préférences- > PyDev- > Scripting Pydev pour qu'il pointe vers ce répertoire, tous les projets de votre espace de travail seront marqués d'une erreur chaque fois qu'un fichier est enregistré.

En exécutant un script qui renvoie les résultats du test dans un format facile à analyser plutôt que ls , et en analysant le résultat, vous devriez pouvoir placer vos marqueurs aux bons endroits.

Voir ceci pour quelques points de départ:

  • Script Jython dans Pydev
  • IMarker est ce qui représente un marqueur.
  • IResource est ce à quoi vous attachez vos marqueurs. Cela peut être des espaces de travail, des projets, des fichiers, des répertoires, etc. resource.createMarker (IMarker.PROBLEM) crée un marqueur de problème.
  • IProject est un type de IResource qui représente un projet. Utilisez la méthode members () pour obtenir le contenu.

Je lance le test à la main pour la première fois ( Exécuter> Exécuter en tant que> Test d'unité Python ). Après cela, j'utilise Ctrl + Maj + F9 pour que les fichiers et les tests soient exécutés, au lieu de sauvegarder avec Ctrl + S et d'attendre un peu de magie.

La combinaison de touches Ctrl + Maj + F9 relance la dernière configuration exécutée.

Clause de non-responsabilité : Eclipse et PyDev sont nouveaux, je peux donc suggérer quelque chose de stupide / évident / faux

J'ai amélioré le " nosy " script pour construire automatiquement la documentation et exécuter des tests en continu. Rien d'étonnant, mais fait le travail. Le poster ici parce que l'original lien est tombé. Contrairement au script curieux original, celui-ci scanne le répertoire de manière récursive et permet de rechercher plusieurs modèles.

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)

J'espère que cela vous aidera.

=)

J'utilise Nosy (disponible sur pypi):

  

Exécutez l'outil de découverte et d'exécution du test de nez chaque fois qu'un fichier source   est changé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top