Pergunta

Existe uma maneira de integrar os testes de unidade de fundo com o ambiente Pydev Eclipse?

Os meus testes de unidade correr bem, mas eu gostaria de integrá-los para executar em segundo plano com base nas alterações de arquivo de origem (por exemplo, com o nariz) e integrar a volta resultado para Eclipse (estou pensando grande X vermelho quando testes falham com um console e log de rastreamento vista).

Não, um nariz running prompt de comando no lado não conta.

Eu tive essa integração Eclipse ao desenvolver coisas RoR.

Obrigado,

Tal.

EDIT: Confira o novo Pydev (1.6.4) http: // pydev .org / manual_adv_pyunit.html

Foi útil?

Solução

Este recurso foi adicionado ao PyDev 2.0.1 com uma opção para relançar os testes no último teste executado sempre que uma alteração de arquivo python, com uma opção adicional para executar novamente apenas os erros - embora ele vai executar o teste completo suíte se não foram encontrados erros, como a idéia é que você trabalha através de seus erros e quando tudo passar um lançamento final para todo o conjunto é feito (então você pode passar para outra tarefa).

O nightly build atual tem esta funcionalidade incorporada.

Picture com nova ação

Outras dicas

Pydev tem alguma integração-teste de unidade, mas isso é apenas como uma configuração de execução ... tão ...

Esta não é uma maneira muito elegante, mas se você:

  1. Ativar Projeto-> criar automaticamente
  2. Nas propriedades do projeto, adicionar um novo construtor de tipo de programa
  3. configurá-lo para executar os testes e selecione 'durante a auto constrói'

Então, pelo menos você terá algo que gera os resultados do teste para o console no recurso salva.

Eu só percebi que PyDev tem suporte a scripts em vez poderoso. Infelizmente eu não tenho o tempo para fazer tudo isso para você (mas se você completar isto, por favor postá-lo aqui:)

Se você criar um arquivo chamado pyedit_nose.py parecida com esta em uma pasta de outra forma vazia:

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)

e configurar Preferências> PyDev-> Scripting Pydev para apontar para este diretório você vai ter todos os projetos em sua área de trabalho marcada com um erro cada vez que um arquivo é salvo.

Ao executar um script que retorna os resultados do teste em algumas fáceis para o formato de análise em vez de ls e analisar a saída que você deve ser capaz de colocar seus marcadores nos lugares certos.

Veja este para alguns pontos de partida:

  • Jython Scripting em Pydev
  • IMarker é o que representa um marcador.
  • IResource é o que você anexar seus marcadores para. Pode ser espaços de trabalho, projetos, arquivos, diretórios etc. resource.createMarker(IMarker.PROBLEM) cria um marcador problema.
  • iProject é um tipo de IResource que representa um projeto. Use o método members() para obter o conteúdo.

Eu executar o teste com a mão pela primeira vez ( Executar> Executar como> teste de unidade Python ). Depois disso, eu uso Ctrl+Shift+F9 ter os arquivos salvos e os testes executados, em vez de salvar com Ctrl+S e esperando alguma mágica acontecer.

A combinação de teclas Ctrl+Shift+F9 relança a última configuração de execução.

Aviso : Eu sou novo para Eclipse e PyDev, para que eu possa estar sugerindo algo bobo / óbvio / errado

I aumentou o script "curioso" para automaticamente testes de documentação de construção e corre continuamente. Nada excepcional, mas começa o trabalho feito. Postá-lo aqui, porque o original ligação caiu. Ao contrário do roteiro intrometida original, este verifica o diretório de forma recursiva e permite procurar vários padrões.

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 isso ajude.

=)

Eu uso Nosy (disponível no pypi):

Executar a ferramenta de descoberta de teste nariz e execução sempre que um arquivo de origem é alterado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top