2014-05-20 3 views
2

nose 패키지는 종종 전용 테스트 파일의 테스트뿐만 아니라 doctests을 실행하는 데 사용됩니다. Doctest 파일에서도 setupteardown 조명기를 실행하려고 시도합니다. 노우즈 실행 설정 사용 안 함

doctesting에 대한 모듈이 다른 목적을 위해 setup라는 기능을 요구하는 일이

- 그것은 예를 들어 Sphinx extension,있을 수 있습니다 - nosetests가 setup를 호출하고 실패합니다.

File ".../site-packages/nose/suite.py", line 291, in setUp 
    self.setupContext(ancestor) 
    File ".../site-packages/nose/suite.py", line 314, in setupContext 
    try_run(context, names) 
    File ".../site-packages/nose/util.py", line 468, in try_run 
    return func(obj) 
    File "sphinx_ext.py", line 14, in setup 
    app.connect('build-finished', my_extension) 
AttributeError: 'module' object has no attribute 'connect' 

(참고 :

def my_tricky_function(arg): 
    """Do something testable 

    >>> my_tricky_function(1) 
    2 
    """ 
    return arg + arg 


def my_extension(app): 
    ... 


def setup(app): 
    """Establish sphinx hooks""" 
    app.connect('build-finished', my_extension) 

가에서 nosestests 결과를 실행 :

명확하게하려면, 여기에 예입니다 setupsetup가 인 범위를 전달 nosetest 인수를 수락 할 때 이 경우 모듈의 이름입니다.

다음 사항은 적용되지 않습니다.

  • __test__ = False (또는 this decorator을 사용)을 setup에 추가해도 호출이 중지되지 않습니다.
  • 은 모듈 수준 설정을 중지하지 않습니다 my_tricky_function.setup = None 설정 --ignore-files
  • 나는 다음과 같은 다소 해키 솔루션을 발견
+0

어둠 속에서 그냥 쐈다. 'my_tricky_function.setup = None' 설정이 도움이 되었습니까? – alecxe

답변

0

(H/t의 @alecxe)에는 명령 줄 옵션에 해당이 없습니다 : 다른 추가 기능 setup_module 이것은 코에서 setup을 숨길 것입니다.

... 

def setup(app): 
    """Establish sphinx hooks""" 
    app.connect('build-finished', my_extension) 

def setup_module(): 
    pass 
1

joeln의 대답은 멋지지만, 모듈의 최상위 네임 스페이스를 약간 오염시킵니다.

nosetests 호출과 일반 호출을 구분하기 위해 인수를 setup()으로 확인합니다. 귀하의 경우 app이 모듈 (또는 connect 속성이 없음)이면 반환하고 아무 것도하지 마십시오.

def setup(app): 
    """Establish sphinx hooks""" 
    if hasattr(app, 'connect'): 
     app.connect('build-finished', my_extension) 

사용자 정의 setuptools.setup(**kwargs)이 코를 넘어 섰던이 문제가있었습니다. nosetest가 인수없이 호출하는 동안 setup()의 정상적인 사용은 항상 몇 가지 키워드 인수를 전달하므로 두 경우를 구별 할 수 있습니다.