2011-05-10 5 views
6

저는 파이썬 unittest에 명령 줄 인수를 제공하고 일부 문제에 직면하고 있습니다. 내가 인터넷에서 검색하고unittest 명령 줄 인수 방법?

unittest.main(argv=[myArg]) 

문제는이 단일 명령 줄 인수에 잘 작동하지만 하나 개 이상의 인수 실패로 인수를 제공 할 수있는 방법을 발견했다. 호출 위

unittest.main(argv=[myArg1, myArg2, myArg3]) 

은 다음 오류와 함께 실패 :

File "/opt/python2.6.6/lib/python2.6/unittest.py", line 816, in __init__ 
    self.parseArgs(argv) 
    File "/opt/python2.6.6/lib/python2.6/unittest.py", line 843, in parseArgs 
    self.createTests() 
    File "/opt/python2.6.6/lib/python2.6/unittest.py", line 849, in createTests 
    self.module) 
    File "/opt/python2.6.6/lib/python2.6/unittest.py", line 613, in 
    loadTestsFromNames suites = [self.loadTestsFromName(name, module) 
    for name in names] 
    File "/opt/python2.6.6/lib/python2.6/unittest.py", line 584, in 
    loadTestsFromName parent, obj = obj, getattr(obj, part) 
AttributeError: 'module' object has no attribute 'admin' 

이에 더 많은 팠 파이썬 unittest 치료의 모든 실행하는 테스트 케이스로 argv을 사용하여 전송 된 것을 발견했다.

유닛 테스트 케이스에 둘 이상의 인수를 제공 할 수있는 방법이 있다면 알려주십시오. IP 주소, 테스트 케이스 태그 등과 같은 하드 코딩 된 값을 무시하고 기본적으로이 테스트 스크립트를 기본 테스트 스크립트 내에서 실행하려고합니다.

미리 감사드립니다.

답변

10

왜 그냥 unittest.main를 실행하기 전에 명령 줄 인수를 꺼내 한 다음 그것을 argv에 대한 [sys.argv[0]]을 제공? 같은

뭔가 : argv=None 주어 졌을 때, unittest.main 실제로 sys.argv을 구문 분석하는 신호로이 소요

if __name__ == '__main__': 
    # do stuff with sys.argv 
    unittest.main(argv=[sys.argv[0]]) 

참고. unittest.main은 프로그램 이름으로 사용할 적어도 하나의 argv 요소가 필요합니다. 따라서 None을 피하면 [sys.argv[0]]은 명령 행 인수가 없다고 생각하기 때문에 좋은 가치를 제공합니다.


P. 방금 마지막 문장을 보았습니다. 그렇다면 명령 줄 인수를 사용하지 마십시오. "기본"테스트 스크립트는 unittest의 API를 사용하여 테스트 케이스를로드하고 원하는대로 맞춤 설정해야합니다.

3

실제로 명령 줄에서 명령을 보내는 대신 OptionParser이 작업을 수행하고 변수에 입력을 입력한다고 가정합니다. 이 같은 한 경우 :

from optparse import OptionParser 
parser = OptionParser() 
parser.add_option("-t", "--tag", dest="tag", help="tag id") 

을 그들은 명령 줄에서 온 것처럼 그런 값 tag 시드 시도, 다음 테스트 클래스 __init__에 다음을 전달합니다.

1

필자는 테스트를 위해 가짜 명령 줄 인수를 설정하는 방법이 필요하다는 점에서 비슷한 소망이 있습니다.

필자가 필요로하는 각 테스트 내에서 sys.argv를 무시하는 것이 효과적이라는 것을 발견했습니다. 사용자가 설명하는 unittest.main()의 함수 인수는 테스트하려는 모듈이 아닌 단위 테스트 자체에 사용됩니다.