2009-11-10 3 views
16

nosetests을 명령 줄에서 실행할 때 '무시되지 않는'경고를 오류로 처리하도록 지정하는 방법은 무엇입니까? 기본적으로경고가있는 nosetests를 오류로 실행 하시겠습니까?

는 경고를 인쇄하지만, 실패로 간주되지 않습니다 : 우리는 우리의 코드는 경고를 생성하지 않기 때문에, 나는이 상황이 OK 싶지 않아

[snip]/service/accounts/database.py:151: SADeprecationWarning: Use session.add() 
    self.session.save(state) 
[snip]/service/accounts/database.py:97: SADeprecationWarning: Use session.add() 
    self.session.save(user) 
............ 
---------------------------------------------------------------------- 
Ran 12 tests in 0.085s 

OK 

.

감사합니다.

편집 : 가 이상적으로 내가 원하는 것은 warnings.simplefilter('error') 이전에 각 시험 문제 (그리고 나중에 그것을 청소)를 nosetests 명령 줄 옵션입니다.

테스트 코드에서 warnings 모듈을 사용하는 모든 솔루션이 그 요점을 무력화시키는 것 같습니다. 경고를 오류로 변환하기 위해 각 테스트 모듈을 수동으로 편집하고 싶지 않습니다. 또한 각 테스트 모듈 작성자가 경고 오류를 '켜기'위해 잊지 않도록 할 수 있습니다.

+0

당신은 쓸 수 있습니다 [코 플러그인] (http://nose.readthedocs.org/en/latest/plugins/interface.html) 읽기 및 stderr을 구문 분석합니다. – dbn

답변

0

코가 직접 제어 할 수 있다고 생각하지 않습니다. 경고가 발행 될 때 경고 모듈이 예외를 발생시키지 않습니다. warnings 모듈을 사용하면 어떤 경고를 예외로 설정해야하는지 제어 할 수 있습니다.

+0

좋은 코는 할 수 없다. 그러나 khinsen의 속임수는 그것을한다. Btw., 'PYTHONWARNINGS = 오류 nosetests ...' –

9

nosetests은 작은 파이썬 스크립트입니다. 편집기로 열고 첫 번째 줄 끝에 -W error을 추가하십시오. 이것은 파이썬 인터프리터에게 경고를 예외로 변환하도록 알려줍니다.

심지어 간단한 플래그 주입 "경고를 오류로 처리"파이썬 환경 변수를 사용하는 것입니다

PYTHONWARNINGS=error nosetests test/test_*.py --pdb 
+0

굉장합니다, 복잡한 일에도 옳은 일을합니다.'nosetests -vx tests/*. py --pdb' –

3

이 @khinsen에 의한 대답은 많은 도움이 있지만, 그것은을 발행하는 경우 nosetests의 실행을 중지한다 "ImportWarning : 디렉토리 'XXX'을 (를) 가져 오지 않음 : __init__.py

또한 가져 오기 중 발생한 경고는 (사용자가 볼 수없는 경우) 테스트 발견 중에 경고 다음과 같이 나타납니다. 테스트) 오류로 처리해서는 안됩니다.

내가 github의를 찾을 수있는 플러그인을, 서면 @의 DBW의 조언을 따랐다 : https://github.com/Bernhard10/WarnAsError

configureoptions 함수의 warnaserror

다음의 플러그인 코, 플러그인이 prepareTestRunner를 구현, 그것은 대체

def prepareTestRunner(self, runner): 
    return WaETestRunner(runner) 

이 클래스를 저장 원래의 TestRunner과 run -Method 오라이를 호출하여 다른 run 메소드가있는 클래스에 의해 디폴트의 TestRunner 다른 warnings.simplefilter을 가진 ginal TestRunner의 실행 메소드.

class WaETestRunner(object): 
    def __init__(self, runner): 
     self.runner=runner 
    def run(self, test): 
     with warnings.catch_warnings(): 
      warnings.simplefilter("error") 
      return self.runner.run(test) 
+1

설치 및 사용 지침을 제공 하시겠습니까? –

관련 문제