2012-08-01 2 views
44

설명서를 검색했지만 찾을 수 없습니다. 많이 설명하지 않은 부부가있었습니다.코의 assert_raises를 사용하는 방법?

은 누군가가 나에게 코의

assert_raises(what should I put here?) 

기능을 설명 할 수 방법을 사용할 수 있나요?

답변

59

assert_raises() 함수는 특정 매개 변수가있는 경우 함수 호출이 지정된 예외를 발생시키는 지 확인하기 위해 테스트합니다.

예를 들어, 두 개의 숫자를 더하는 add 함수가있는 경우이를 전달할 때 TypeError, 즉 정수와 문자열을 전달해야합니다. 따라서 :

from nose.tools import assert_raises 

def add(x, y): 
    return x + y 

assert_raises(TypeError, add, 2, "0") 

첫 번째 인수는 예상되는 예외 유형입니다. 두 번째는 호출 할 함수입니다. 인수의 나머지는 함수에 전달됩니다 (이 경우에는 함수 내에 xy이됩니다).

예상되는 예외가 함수에 의해 발생하면 어설 션이 성공합니다.

+1

좋아요 감사합니다!하지만, assert_raises을 같은 assert_equal 같은 다른 코의 기능을 체크 아웃 할 수있는 당신은 또한 좋은 코 문서에 대한 링크를 알고있다! 나도 그것을 찾는 데 문제가 있었다 – user1544624

+0

을 @kindall. 그래도'help (assert_rases)'를 시도해 볼 수 있습니다. – kindall

+4

비트가 숨겨져 있지만 http://nose.readthedocs.org/en/latest/testing_tools.html#module-nose.tools 첫 번째 단락은 "... and assertX 메소드가 모두 unittest.TestCase에서 발견되었습니다 (오직 PEP 8 방식으로되어 있기 때문에 assertEqual보다는 assert_equal을 사용하십시오. "). 그 목록은 다음과 같습니다. http://docs.python.org/2/library/unittest.html#assert-methods –

78

허용되는 대답은 정확하지만, assert_raises 방법을 사용하는 것이 더 좋습니다.

단순히 예외가 발생한다고 주장하려면 @raises 구문을 사용하는 것이 더 간단하고 명확합니다. 그러나

@raises(HTTPError) 
def test_exception_is_raised: 
    call_your_method(p1, p2) 

, 당신은 예를 들어, 발생한 예외로 좀 더하고 싶은 가정 대신 500, 무단 : 서버 오류를 우리가 그 HTTPError 유형 401 인을 제기 주장해야합니다.

구문 위의 상황이 도움이되지 않는다면 다른 방법으로 assert_raises을 사용해야합니다. callable을 두 번째 매개 변수로 전달하지 않으면 assert_raises은 예외 세부 정보를 자세히 테스트하는 데 사용할 수있는 컨텍스트를 반환합니다.

def test_exception_is_raised: 
    with assert_raises(HTTPError) as cm: 
     call_your_method(p1, p2) 
    ex = cm.exception # raised exception is available through exception property of context 
    ok_(ex.code == 401, 'HTTPError should be Unauthorized!') 
+8

감사합니다. 새로운 것을 가르쳐 줬습니다. – user1544624

+0

나는 예외의 메시지를보고 싶다. 전 cm.exception에서 얻은 ex는 빈 ex.message를가집니다. 그러나 메시지와 함께 예외가 발생합니다. 무슨 일 이니? – akshitBhatia

+1

이 작업을 수행하는 방법에 대한 정보를 찾을 수있는 유일한 곳은 ... –

관련 문제