24

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.

Cleb
  • 25,102
  • 20
  • 116
  • 151
user2097190
  • 241
  • 1
  • 2
  • 4

1 Answers1

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