다음과 같은 smth가 있다고 가정 해 봅시다.
import py, pytest
ERROR1 = ' --- Error : value < 5! ---'
ERROR2 = ' --- Error : value > 10! ---'
class MyError(Exception):
def __init__(self, m):
self.m = m
def __str__(self):
return self.m
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
return i
# ---------------------- TESTS -------------------------
def test_foo1():
with pytest.raises(MyError) as e:
foo(3)
assert ERROR1 in str(e)
def test_foo2():
with pytest.raises(MyError) as e:
foo(11)
assert ERROR2 in str(e)
def test_foo3():
....
foo(7)
....
Q : MyError가 발생하지 않는지 테스트하기 위해 test_foo3 ()을 어떻게 만들 수 있습니까? 내가 테스트 할 수 있다는 것은 분명합니다.
def test_foo3():
assert foo(7) == 7
하지만 pytest.raises ()를 통해 테스트하고 싶습니다. 어쨌든 가능할까요? 예를 들어, "foo"함수에 반환 값이 전혀없는 경우
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
이 방법으로 테스트하는 것이 합리적 일 수 있습니다, imho.
foo(7)
는 괜찮습니다. 올바른 메시지가 표시되고 모든 pytest 출력으로 디버그하기가 더 쉽습니다. @Faruk ('Unexpected error...'
) 에서 강요 한 제안 은 오류에 대해 아무것도 말하지 않으며 멈출 것입니다. 더 나아질 수있는 유일한 방법은 의도를 다음과 같이 말하는 것test_foo3_works_on_integers_within_range()
입니다.