Simon Connah via Tutor wrote: > Hi, > I'm just wondering what the accepted way to handle unit testing exceptions > is? I know you are meant to use assertRaises, but my code seems a little > off.
> try: > some_func() > except SomeException: > self.assertRaises(SomeException) The logic is wrong here as you surmise below. If you catch the exception explicitly you have to write try: some_func() except SomeException: pass # OK else: self.fail("no exception raised") Alternatively you can write self.assertRaises(SomeException, some_func) which is already better, but becomes a bit hard to read once some_func takes arguments: self.assertRaises(SomeException, some_func, "one", two=42) Therefore I recommend using assertRaises() as a context manager: with self.assertRaises(SomeException): some_func("one", two=42) This has the advantage that some_func() appears with its args as it would in normal code, and that you can also test expressions: with self.assertRaises(ZeroDivisionError): MyNumber(1)/0 > Is there a better way to do this at all? > The problem with the above code is that if no exception is raised the code > completely skips the except block and that would mean that the unit test > would pass so, I considered adding: self.fail('No exception raised') at > the end outside of the except block but not sure if that is what I need to > do. Any help is appreciated. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor