파이썬, 유니테스트: 전달할 수 있는 방법이 명령줄 옵션을 앱

I have a 모듈에서는 유니테스트 임포트합니다 계시한하나님께 있는 일부 티스트카지스. 싶다 일부 수락하려면 명령줄이 옵션 (예를 들어 데이터 파일 이름 아래) 하지만 나는 메시지를 전달할 때 얻을 수 있는 옵션이 안 recognized&quot &quot 시도하시겠습니까 옵션이 있습니다. -;). 이것은 유니테스트 + 옵션 제공 할 수 있는 앱 (참고: # 39 m, i& 롭스파스 사용하여 처리할 수 있는 옵션)? 감사합니다.

$ python test_app_data.py -i data_1.txt

option -i not recognized

=

후속: 이 오류는 구축 솔루션을 제안했다.

import cfg_master  #has the optparse option-handling code

...

if __name__ == '__main__':    
    #add you app's options here...
    options_tpl = ('-i', '--in_dir', '-o', '--out_dir')
    del_lst = []
    for i,option in enumerate(sys.argv):
        if option in options_tpl:
            del_lst.append(i)
            del_lst.append(i+1)

    del_lst.reverse()
    for i in del_lst:
        del sys.argv[i]

    unittest.main()
질문에 대한 의견 (2)
해결책

39 라고 it& Alex& 기반으로, s, s 사실 매우 쉽습니다 # 39 를 사용하여 ['아리파스'] (http://docs.python.org/library/argparse.html):

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--input', default='My Input')
    parser.add_argument('filename', default='some_file.txt')
    parser.add_argument('unittest_args', nargs='*')

    args = parser.parse_args()
    # TODO: Go do something with args.input and args.filename

    # Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone)
    sys.argv[1:] = args.unittest_args
    unittest.main()

나는 모든 플래그, t 테스트되었습니다 haven& # 39 로 볼 수 있지만, 테스트 유니테스트 전달할 수 있습니다 슬래시나 작동합니까 방관하겠나 반군지역 이름을 작동합니다, 예:

python test.py --input=foo data.txt MyTest

Foo '와' 와 '런입니다 미치스트 다타.t스트'.

해설 (6)

39, & # 39, "만약 내 name = main& you& # 39 섹션에 보이지 않고, re: '우리', '다음' 델 시스콜라리프 you& # 39 할 수있을 롭스파스 전에 '코드' [1:] '전달하십시오 유니테스트 통제할 수 있도록 rmw 코드 doesn& # 39, t # 39, ve you& again 너회의 명령줄 옵션을 해석하기 시도하시겠습니까 저들이요 처리할 때 이미 (It& # 39 에 좀 더 열심히 할 몇 가지 자신만의 and 또한 전달하십시오 일부 아래로 '' 이 이뤄질 수 있을 경우 유니테스트 표시되어도 같은 복잡한 요구).

해설 (5)

39 생각해봤죠 I& 공유하지는; d - 내 solution for 추가에는 디버그입니다 전환하십시오 테스트하려면 제어입니다 로거가:

if __name__=='__main__':
     parser = argparse.ArgumentParser(description="Build a compilation script")
     parser.add_argument('--debug', help='Turn on debug messages', action='store_true', default=False)

     args = parser.parse_args()

     if args.debug:
         log_level = logging.DEBUG
     else:
         log_level = logging.INFO

     logging.basicConfig(level=log_level)
     sys.argv.pop()
     unittest.main()

그럼 내가 '확장' 유니테스트스테스트케이스 로깅하기 추가할 수 있습니다.

 class mcs_TestCase(unittest.TestCase, object):
     def __init__(self, *args, **kwargs):
         super(mcs_TestCase,self).__init__(*args,**kwargs)
         logging.basicConfig()
         self.logger = logging.getLogger(__name__)
         ...

지금 내가 할 수 있지만, 내 선반가공 메시지를 on / off 를 사용하여 일반 회귀 테스트 디버그로 it gets 에서 무시됨.

해설 (0)

내가 사용하는 소규모 독립 어플리케이션, 초기 센티넬 옵션 (t) 를 호출하기 전에 아리파스 호츨 유니테스트롬맹 (). 아르구멍파서 ()

if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] in ["-t", "--test"]:
        del(sys.argv[1])
        sys.exit(unittest.main()) # pass sys.argv[

    p = argparse.ArgumentParser()
    . . .
해설 (0)

인수 및 옵션, 그들을 유니테스테스 실행하십시오 안됩니다 시행하십시오 만들 때 다른 조건 하에 예측 가능한 적게 실행하십시오 이렇게. 왜 서로 다른 데이터를 알아낼 합니다 실행하는 데 필요한 충분한 테스트 suite 를 포함하는 모든 데이터세트를 저회가 점심시간요 완료하십시오 방전시키십시오 않고 다르게 실행하십시오 때마다.

해설 (7)