Giả sử chúng ta có smth như thế:
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)
....
H: Làm cách nào tôi có thể tạo test_foo3 () để kiểm tra mà không có MyError nào xuất hiện? Rõ ràng là tôi có thể kiểm tra:
def test_foo3():
assert foo(7) == 7
nhưng tôi muốn kiểm tra điều đó thông qua pytest.raises (). Có thể bằng cách nào đó? Ví dụ: trong trường hợp, hàm "foo" không có giá trị trả về nào cả,
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
nó có thể hợp lý để kiểm tra theo cách này, imho.
foo(7)
vẫn ổn. Bạn sẽ nhận được thông báo phù hợp và sẽ dễ dàng gỡ lỗi hơn với tất cả đầu ra pytest. Đề xuất bạn buộc từ @Faruk ('Unexpected error...'
) không nói gì về lỗi và bạn sẽ gặp khó khăn. Điều duy nhất bạn có thể làm để làm cho nó tốt hơn là nêu rõ ý định của bạn như thế nàotest_foo3_works_on_integers_within_range()
.