예외 코드를 테스트 할 때는 self.assertRaises()
as a context manager; 이것은 당신이 .code
속성 테스트시키는, 제기 예외에 액세스 할 수 있습니다 :
with self.assertRaises(SystemExit) as cm:
arg_parse_obj.parse_known_args(['-h'])
exit_exception = cm.exception
self.assertEqual(the_exception.code, 0)
'억제'으로 또는 출력을 테스트, 당신도 sys.stdout
또는 argparse
출력에 따라 sys.stderr
(도움을 캡처해야합니다 텍스트는 stdout
). 내가 여기에 상황에 맞는 매니저를 중첩,하지만 당신은 또한 하나 개의 라인으로 그들을 결합 할 수 있습니다 파이썬 2.7과 새로운
with self.assertRaises(SystemExit) as cm:
with capture_sys_output() as (stdout, stderr):
arg_parse_obj.parse_known_args(['-h'])
exit_exception = cm.exception
self.assertEqual(the_exception.code, 0)
self.assertEqual(stderr.getvalue(), '')
self.assertEqual(stdout.getvalue(), 'Some help value printed')
;
from contextlib import contextmanager
from StringIO import StringIO
@contextmanager
def capture_sys_output():
capture_out, capture_err = StringIO(), StringIO()
current_out, current_err = sys.stdout, sys.stderr
try:
sys.stdout, sys.stderr = capture_out, capture_err
yield capture_out, capture_err
finally:
sys.stdout, sys.stderr = current_out, current_err
및 이들를 사용 : 당신은 그것을 위해 컨텍스트 관리자를 사용할 수 있습니다 이것은 서둘러 79 문자 제한을 초과하는 경향이 있지만. ['-h']
사용에
나는'with '가 연속 대괄호를 허용한다고 생각하지만 그렇지 않다. 그래서 (with a really_long_expression as a really_really_long_expression b) suite와 같은 일을 할 수 없다. –
Bakuriu
@Bakuriu : 백 슬래시를 사용해야합니다. –
계속하려면 백 슬래시를 사용하는 것이 싫습니다. 나는 미래에 그들이 괄호를 허용하기를 바랍니다. 내가 볼 수있는 유일한 문제는 문법을'with (, , ...) :'(as를 사용하지 않고) 허용하면 중첩 된 컨텍스트 관리자를 사용하거나 컨텍스트 관리자로 자체 튜플 (이해가되지 않는다 ...). –
Bakuriu