NoneType 객체에 단위 테스트의 assertRaises ()를 올바르게 사용하는 방법은 무엇입니까? [복제]
이 질문에는 이미 답변이 있습니다.
- 파이썬 함수가 예외를 던지는 지 어떻게 테스트합니까? 답변 13 개
간단한 테스트 사례를 수행했습니다.
def setUp(self):
self.testListNone = None
def testListSlicing(self):
self.assertRaises(TypeError, self.testListNone[:1])
테스트가 통과 될 것으로 예상되지만 예외가 발생합니다.
Traceback (most recent call last):
self.assertRaises(TypeError, self.testListNone[:1])
TypeError: 'NoneType' object is unsubscriptable
TypeError 예외가 발생하므로 assertRaises가 전달 될 것이라고 생각 했습니까?
python2.7 이상을 사용하는 경우 assertRaises 기능을 사용하여 컨텍스트 관리자로 사용하고 다음을 수행 할 수 있습니다.
with self.assertRaises(TypeError):
self.testListNone[:1]
지금까지 제공된 것 이외의 다른 방법으로 python2.6을 사용하는 경우 python2.6 의 unittest 새로운 기능의 백 포트 인 unittest2를 사용하는 것이 위의 코드를 사용하여 작동하게 할 수 있습니다.
NB : unittest의 새로운 기능 (SkipTest, test discovery ...)을 좋아해서 unittest2를 최대한 많이 사용하려고합니다. python2.6 <에서 unittest가 제공하는 것보다 훨씬 많은 것이 있기 때문에 동일한 작업을 수행하는 것이 좋습니다.
문제는 메소드를 호출하기 전에 인수를 평가해야 하므로 TypeError
'이전'발생 하는 문제입니다 . 다음 과 같은 표현식 을 전달해야합니다 .assertRaises
assertRaises
lambda
self.assertRaises(TypeError, lambda: self.testListNone[:1])
일반적인 사용 방법 assertRaises
은 함수를 호출하는 것입니다.
self.assertRaises(TypeError, test_function, args)
함수 호출 test_function (args)가 TypeError를 발생시키는 지 테스트합니다.
문제 self.testListNone[:1]
는 파이썬이 assertRaises
메소드가 호출 되기 전에 표현식을 즉시 평가한다는 것 입니다. 전체 이유 test_function
와 args
에 별도의 인수로 전달됩니다 self.assertRaises
수 있도록하는 것입니다 assertRaises
전화 test_function(args)
내에서 try...except
허용 블록 assertRaises
예외를 잡을 수 있습니다.
을 정의 self.testListNone = None
하고 호출 할 함수가 필요 하므로 다음 과 같이 operator.itemgetter를 사용할 수 있습니다 .
import operator
self.assertRaises(TypeError, operator.itemgetter, (self.testListNone,slice(None,1)))
이후
operator.itemgetter(self.testListNone,slice(None,1))
는 말이 오래 걸리지 self.testListNone[:1]
만 함수 ( operator.itemgetter
)를 인수 와 구분합니다 .
전체 스 니펫은 다음과 같습니다. @mouad의 답변을 오류 메시지 (또는 일반적으로 str
표현)에 대한 주장으로 확장 args
하여 유용 할 수 있습니다.
from unittest import TestCase
class TestNoneTypeError(TestCase):
def setUp(self):
self.testListNone = None
def testListSlicing(self):
with self.assertRaises(TypeError) as ctx:
self.testListNone[:1]
self.assertEqual("'NoneType' object is not subscriptable", str(ctx.exception))
'Programing' 카테고리의 다른 글
스칼라에서 파일에 쓰는 방법? (0) | 2020.06.09 |
---|---|
프로그래밍 방식으로 TabBar 탭보기로 전환 하시겠습니까? (0) | 2020.06.09 |
pandas dataframe에서 html로 변환 할 때 html로 전체 (잘리지 않은) 데이터 프레임 정보를 표시하는 방법은 무엇입니까? (0) | 2020.06.09 |
날짜에 하루 추가 (0) | 2020.06.09 |
div 내의 모든 양식 요소를 사용하지 않도록 설정 (0) | 2020.06.09 |