2012-08-10 2 views
2

예외를 위해 파이썬 코드를 테스트해야하지만 올바른 명령문을 실행할 수없는 것 같습니다. 내 생산 코드를 테스트 할 때
나는 예외가 발생되는 것을 볼 수 있지만 내 단위 테스트 파일에서이 예외 테스트 할 때 나는이 얻을 : 나는 SO에 비슷한 질문을 읽어python에서 파이썬으로 예외 테스트하기

testincorrectparam (unittestearnings.TestEarningsArgs) 
should raise error when param not an integer ... "3v" is not a valid argument. i should be an integer 
ERROR 

하지만 난 단지 돈 '이 t은

생산 코드는 다음과 같습니다 .. 내 문제에 대한 만족스러운 답변을 찾기 위해 관리 :

class Earnings(): 

    def printd(i=0): 

     try: 
      i = int(i) 

     except Exception: 
      print('"' + i + '"' + " is not a valid argument. i should be an integer") 
      sys.exit(0) 

그리고 단위 테스트 코드는 이것이다 :

from earnings import Earnings 
import unittest 

class TestEarningsArgs(unittest.TestCase): 

    def testincorrectparam(self): 
     '''should raise error when param not an integer''' 
     e = Earnings() 
     value = "3v" 
     self.assertRaises(Exception, e.printd(i=value)) 

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

정말 감사드립니다.

+0

'printd()'는 "param"을 취하지 않습니다. n amed 매개 변수가 없으므로 테스트 또는 코드도 올바르지 않습니다. – geoffspear

+0

@Wooble이 점을 발견해 주셔서 감사합니다. 코드가 이제 일관되었습니다. 내 질문은 여전히 ​​유효하지만. 환호 – jule64

답변

1

문제는 예외가 catch되어 unittest로 전달되지 않는다는 것입니다. try-except 문을 제거하고 i = int(i)으로 두어야합니다. 이 경우 예외가 발생하고 assertRaises이 그 자체를 잡습니다.

또 다른 문제는 코드에 sys.exit (0) 줄이 있습니다. Exception 클래스가 특정 예외가 아니므로 (예외가 발생할 것으로 예상되는 상황에 대해보다 구체적인 예외를 발생시켜야 함) 좋지 않은 raise (...) 예외로 바꾸어야합니다.

+0

Rostyslav 내 의견을 해결하는 데 도움이 귀하의 의견을 주셔서 감사합니다. 지금 해결책을 게시 할 예정입니다. 불행히도 저는 그렇게 할 수있는 연공 서열이 없기 때문에 여러분의 의견을 업 워드 할 수 없습니다. – jule64

+0

도움이된다면 답을 수락하십시오.) Upvote는 필요하지 않습니다. –

0

내가 너무

self.assertRaises(Exception, e.printd,i=value) 

그것이 작동 희망 보시기 바랍니다 내가 assertRaise의 일반적인 형태는

TestCase.assertRaises(Exception, callable, parameter1,parameter2,...) 

생각 파이썬에서 유닛 테스트 배우려고 노력하고 raise

+1

... try 절에서 Exception 대신 ValueError를 잡으려고해야합니다. – Meitham

+0

감사합니다. 나는 "다이브로 파이썬"에서 발견 한 위대한 예제를 기반으로 사용자 정의 예외를 발생 시키기로 결정했습니다. 건배 – jule64

0

sys.exit(0) 교체 당신