I am new to pytest
and am trying to convert some functional test scripts into ones that play nicely with pytest
. My module has custom error types and I'm trying to use the with pytest.raises() as excinfo
method. This is a scientific/numerical package and I need to test that certain methods are consistent when called, so I can't just drill down to the lower-level stuff.
Asked
Active
Viewed 2.8k times
24

Cleb
- 25,102
- 20
- 116
- 151

user2097190
- 241
- 1
- 2
- 4
1 Answers
43
What is stopping you importing the specific exception and using it in your with
pytest.raises statement? Why is this not working? It would be more helpful if you could provide more detail about what problem you are facing.
# your code
class CustomError(Exception):
pass
def foo():
raise ValueError('everything is broken')
def bar():
raise CustomError('still broken')
#############
# your test
import pytest
# import your module, or functions from it, incl. exception class
def test_fooErrorHandling():
with pytest.raises(ValueError) as excinfo:
foo()
assert excinfo.value.message == 'everything is broken'
def test_barSimpleErrorHandling():
# don't care about the specific message
with pytest.raises(CustomError):
bar()
def test_barSpecificErrorHandling():
# check the specific error message
with pytest.raises(MyErr) as excinfo:
bar()
assert excinfo.value.message == 'oh no!'
def test_barWithoutImportingExceptionClass():
# if for some reason you can't import the specific exception class,
# catch it as generic and verify it's in the str(excinfo)
with pytest.raises(Exception) as excinfo:
bar()
assert 'MyErr:' in str(excinfo)

pfctdayelise
- 5,115
- 3
- 32
- 52
-
2Looks like your last `with py.test.raises` should be `with pytest.raises` – Ian Hunter Apr 12 '14 at 05:32
-
@IanHunter updated now, thanks (you can tell I'm still using the 'py.test' version :)) – pfctdayelise Apr 13 '14 at 15:45
-
5For python3: `assert str(excinfo.value) == 'everything is broken'` – hyprnick Sep 20 '16 at 16:58