문제

배경 단위 테스트를 Pydev Eclipse 환경과 통합하는 방법이 있습니까?

내 단위 테스트는 잘 실행되지만 소스 파일 변경 (예 : 코로)을 기반으로 백그라운드에서 실행되도록 통합하고 결과를 ECLIPSE에 다시 통합하려고합니다 (콘솔에서 테스트가 실패 할 때 Big Red X라고 생각합니다. 추적 로그보기).

아니요, 측면에서 코를 실행하는 명령 프롬프트는 계산되지 않습니다.

ROR 작업을 개발할 때이 일식 통합을 받았습니다.

감사,

탈.

편집하다: 새로운 pydev (1.6.4)를 확인하십시오. http://pydev.org/manual_adv_pyunit.html

도움이 되었습니까?

해결책

이 기능은 Python 파일이 변경 될 때마다 테스트를 다시 시작할 수있는 옵션과 함께 Pydev 2.0.1에 추가되었습니다. Python 파일이 변경 될 때마다 테스트를 다시 시작하고 오류 만 다시 실행하는 추가 옵션이 있습니다. 아이디어가 오류를 통해 작업하고 전체 스위트에 대한 최종 출시가 완료되면 오류가 발견되었습니다 (그러면 다른 작업으로 이동할 수 있음).

현재 야간 빌드에는이 기능이 포함되어 있습니다.

Picture with new action

다른 팁

Pydev는 단위 테스트 통합이 있지만 실행 구성 일뿐입니다 ... 그래서 ...

이것은 매우 우아한 방법은 아니지만 다음과 같은 경우 :

  1. 프로젝트-> 빌드를 자동으로 활성화하십시오
  2. 프로젝트 속성에서 새로운 유형 프로그램 빌더를 추가하십시오.
  3. 테스트를 실행하고 '자동 빌드 중'을 선택하도록 구성하십시오.

그런 다음 적어도 테스트 결과를 자원 저장에 대한 콘솔에 출력하는 무언가를 얻을 수 있습니다.

방금 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 출력을 구문 분석하면 마커를 올바른 장소에 넣을 수 있어야합니다.

몇 가지 시작점은 다음과 같습니다.

  • Pydev의 Jython 스크립팅
  • Imarker 마커를 나타내는 것입니다.
  • Iresource 마커를 부착하는 것입니다. 작업 공간, 프로젝트, 파일, 디렉토리 등이 될 수 있습니다. resource.createMarker(IMarker.PROBLEM) 문제 마커를 만듭니다.
  • iproject 유형입니다 IResource 그것은 프로젝트를 나타냅니다. 사용 members() 내용을 얻는 방법.

나는 처음으로 손으로 테스트를 실행합니다 (> 파이썬 단위 테스트로 실행하십시오). 그 후, 나는 사용한다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)

도움이 되었기를 바랍니다.

=)

나는 사용한다 (PYPI에서 사용 가능) :

소스 파일이 변경 될 때마다 코 테스트 검색 및 실행 도구를 실행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top