2011-04-07 8 views
6

testFile.py 파이썬 모듈을 다음과 같이 정의한다고 가정합니다.생성 된 코 테스트 실행

def test_evens(): 
    for i in range(0, 5): 
     yield check_even, i, i*3 

def check_even(n, nn): 
    assert n % 2 == 0 or nn % 2 == 0 

나는 코가 수집 전용 모드로 테스트를 식별 할 때 나는

testFile.test_evens(0, 0) ... ok 
testFile.test_evens(1, 3) ... ok 
testFile.test_evens(2, 6) ... ok 
testFile.test_evens(3, 9) ... ok 
testFile.test_evens(4, 12) ... ok 

내가

nosetests -v TESTFILE 사용하여 모든 테스트를 실행할 수 있습니다 얻을 :

을 test_evens

그러나 testFile.test_evens (2, 6) 만 실행하려는 경우 (즉 모든 테스트가 아닌 경우) ?

명령 줄에서이 작업을 수행 할 수있는 방법이 있습니까?

답변

7

Nose는 기본적으로이 작업을 수행 할 수 없습니다. 다음은 몇 가지 옵션이 있습니다 : 당신이 찾고되지 것을 명령 줄 아마

에서

1. 가짜는,하지만 난 그것을 언급했다. 또한 이 단순화하는 래퍼 스크립트를 만들 수 있습니다

python -c 'import testFile; testFile.check_even(2, 6)' 

2. 사용자 정의 코 시험 로더이 조금 더 복잡

만들기를,하지만 당신은 사용자 정의 테스트를 로더를 만들 수있는 생성자 을 지정하여 명령 줄 인수를 해석하고 생성기에서 테스트 및 인수를 추출한 다음 일치하는 인수가있는 테스트를 포함하는 제품군을 반환합니다.

import ast 
import nose 

class CustomLoader(nose.loader.TestLoader): 

    def loadTestsFromName(self, name, module=None): 
     # parse the command line arg 
     parts = name.split('(', 1) 
     mod_name, func_name = parts[0].split('.') 
     args = ast.literal_eval('(' + parts[1]) 

     # resolve the module and function - you'll probably want to 
     # replace this with nose's internal discovery methods. 
     mod = __import__(mod_name) 
     func = getattr(mod, func_name) 

     # call the generator and gather all matching tests 
     tests = [] 
     if nose.util.isgenerator(func): 
      for test in func(): 
       _func, _args = self.parseGeneratedTest(test) 
       if _args == args: 
        tests.append(nose.case.FunctionTestCase(_func, arg=_args)) 
     return self.suiteClass(tests) 

nose.main(testLoader=CustomLoader) 

그것을 실행 :

% python runner.py 'testFile.test_evens(2, 6)' -v 
testFile.check_even(2, 6) ... ok 

% python runner.py 'testFile.test_evens(2, 6)' 'testFile.test_evens(4, 12)' -v 
testFile.check_even(2, 6) ... ok 
testFile.check_even(4, 12) ... ok 

% python runner.py 'testFile.test_evens(1, 3)' -v 
testFile.check_even(1, 3) ... FAIL 
다음

는 충분히 (runner.py)에 구축하기 위해 제공해야합니다 몇 가지 예제 코드
관련 문제