【发布时间】:2013-12-15 00:20:42
【问题描述】:
假设我们有这样的东西:
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)
....
问:如何让 test_foo3() 进行测试,不会引发 MyError? 很明显,我可以测试一下:
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)
以这种方式进行测试可能有意义,恕我直言。
【问题讨论】:
-
好像在找问题,代码测试
foo(7)就可以了。您将收到正确的消息,并且使用所有 pytest 输出进行调试会更容易。您从@Faruk ('Unexpected error...') 强制提出的建议没有说明该错误,您将陷入困境。你唯一能做的就是说明你的意图,比如test_foo3_works_on_integers_within_range()。 -
这能回答你的问题吗? Python unittest - opposite of assertRaises?