How do you test that a Python function throws an exception? How do you test that a Python function throws an exception? python python

How do you test that a Python function throws an exception?


Use TestCase.assertRaises (or TestCase.failUnlessRaises) from the unittest module, for example:

import mymodclass MyTestCase(unittest.TestCase):    def test1(self):        self.assertRaises(SomeCoolException, mymod.myfunc)


Since Python 2.7 you can use context manager to get ahold of the actual Exception object thrown:

import unittestdef broken_function():    raise Exception('This is broken')class MyTestCase(unittest.TestCase):    def test(self):        with self.assertRaises(Exception) as context:            broken_function()        self.assertTrue('This is broken' in context.exception)if __name__ == '__main__':    unittest.main()

http://docs.python.org/dev/library/unittest.html#unittest.TestCase.assertRaises


In Python 3.5, you have to wrap context.exception in str, otherwise you'll get a TypeError

self.assertTrue('This is broken' in str(context.exception))


The code in my previous answer can be simplified to:

def test_afunction_throws_exception(self):    self.assertRaises(ExpectedException, afunction)

And if afunction takes arguments, just pass them into assertRaises like this:

def test_afunction_throws_exception(self):    self.assertRaises(ExpectedException, afunction, arg1, arg2)