2014-07-08 2 views
3

Nose2 플러그인에서 단위 테스트를 실제로 건너 뛰는 데 문제가 있습니다. 테스트를 건너 뛰고 최종 결과에서 이유를 확인할 수는 있지만 테스트는 계속 실행됩니다. 이 예제 코드는 기본적으로 플러그인이 활성화되어있는 한 테스트를 건너 뜁니다. 내가 전화하면Nose2 플러그인에서 단위 테스트 건너 뛰기

from nose2.events import Plugin 

class SkipAllTests(Plugin): 
    def startTest(self, event): 
     event.result.addSkip(event.test, 'skip it') 
     event.handled = True 

event.test.skipTest('reason') 실제로는해야 같은 SkipTest 예외가,이 예외가 테스트 러너에 의해 체포되지 않은 단지, 그것은 그냥 내 startTest 후크 방식의 내부에서 제기시킵니다. 어떤 아이디어?

답변

2

실제로는 startTest 후크를 사용하여 테스트를 중단 할 수 있다고 생각하지 않습니다. nose2 docsmatchPath 또는 getTestCaseNames을 사용하는 것이 좋습니다.

from nose2.events import Plugin 

class SkipAllTests(Plugin): 
    configSection = "skipper" 
    commandLineSwitch = (None, 'skipper', "Skip all tests") 

    def matchPath(self, event): 
     event.handled = True 
     return False 

matchPath 문서

실제로 명시 적으로 그것을 실행 테스트를 중지하는 방법을 설명합니다 :

플러그인은 로드되는 파이썬 모듈을 방지하기 위해이 훅을 사용할 수 있습니다 여기에 matchPath를 사용하여 작업 예제가 테스트 로더에 의해로드되도록하거나 테스트 로더에 의해로드되도록한다. event.handled를 True로 설정하고 False를 반환하면 로더가 모듈을 건너 뛸 수 있습니다.

이 방법을 사용하면 테스트 사례가로드되지 않습니다. 당신이 생략으로 테스트가 실제로는 전혀 테스트의 목록에 표시하지 않고이없는 것보다, 목록에 표시하려는 경우 StartTestEvent와 해커 약간의 작업을 수행 할 수 있습니다 여기에

def dummy(*args, **kwargs): 
    pass 

class SkipAllTests(Plugin): 
    configSection = "skipper" 
    commandLineSwitch = (None, 'skipper', "Skip all tests") 
    def startTest(self, event): 
     event.test._testFunc = dummy 
     event.result.addSkip(event.test, 'skip it') 
     event.handled = True 

우리는 테스트가 실행될 실제 함수를 아무것도 수행하지 않는 더미 함수로 대체합니다. 이렇게하면 테스트가 실행될 때 no-ops가 표시되고 건너 뛴 것으로보고됩니다.

+0

그래, 내가 생각할 수있는 최선의 방법 이었어. 미래의 시청자들에게'setUp'과'tearDown' 메소드를 dummy 함수로 패치 할 수 있습니다. 그것들은 여전히 ​​바람직하지 않을 수도있다. –

관련 문제