2017-12-08 3 views
0

unittest에서 예외 처리를 unittest하고 예외가 throw되는지 확인하려면 assertRaises을 사용하고 있습니다.파이썬 unittest가 예외 처리를 처리합니다.

class Add(): 
    def __init__(self, x, y): 
     if type(x) != int or type(y) != int: 
      raise Exception('Not a valid number') 


Add(None, None)    

import unittest 
from test2 import Add 
class TestAdd(unittest.TestCase): 
    def test_check_for_valid_nos(self): 
     self.assertRaises(Exception, Add(None,None)) 

if __name__ == '__main__': 
    unittest.main() 

이 코드를 실행할 때 여전히 예외가 발생합니다. 나는 예외가 제기되었다고 말하는 테스트를 통과 할 것으로 기대한다.

+1

'Add (None, None)'줄을 삭제 해 보셨습니까? –

+0

인수 목록에서 추가를 호출 할 수 없으면 assertRaises를 호출하기 전에 Add를 실행합니다. –

답변

1

Add 함수를 assertRaises에 전달할 때 직접 함수를 실행하지 말고 나중에 위치 지정 인수를 전달하십시오.

assertRaises(Exception, Add, None, None) 

assertRaises의 내부 구현이 기능을 실행하고 적절한 예외 검사 제어 할 수있다. 함수를 직접 호출하는 경우 (예 : assertRaises(Exception, Add(None, None))) assertRaisesAdd(None, None)을 완전히 계산해야만합니다. 자체 함수 본문을 실행할 수 있습니다. 해당 함수 호출의 결과를 입력 인수로 사용해야하기 때문입니다. 예외를 트리거하는 인수가있는 Add에 대한 보호되지 않은 호출이므로 실제 함수 본문 assertRaises이 사용되기 전에 Exception이 발생합니다.

+0

여전히 같은 문제 ... 나는 이것을 시도했다 - self.assertRaises (Exception, Add, None, None) – user1050619

+2

두 파일 중 하나의 어딘가에 'Add (None, None)'을 호출하고 있습니까? 소스 코드에서'import' 문 바로 위에 있습니다. 그게 어디 있니? 'add (None, None)'이 그 파일에 있기 때문에'test2' 모듈을 임포트하려 할 때 예외를 던질 수 있습니까? – ely

+0

그게 전부예요. 소스 코드에 인스턴스가있었습니다. 감사합니다. – user1050619

관련 문제