Issue 14403: unittest module: provide inverse of "assertRaises" (original) (raw)

Created on 2012-03-25 11:43 by gwrtheyrn, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (5)
msg156750 - (view) Author: Danilo Bargen (gwrtheyrn) Date: 2012-03-25 11:43
Most assert statements of the unittest module provide both an assert statement as well as its inverse, like "assertIn" and "assertNotIn". There is apparently no such thing for exceptions. I can do the following: > with self.assertRaises(SomeException): > do_something() But not: > with self.assertRaisesNot(SomeException): > do_something() I don't want to simply execute the code and hope that it doesn't raise an exception, because if it does, the test fails with an "error" status instead of a "failed" status. A possible workaround is the following code: > try: > do_something() > except SomeException: > self.fail() But that is not that expressive as an assert statement. A naming alternative would be "assertDoesNotRaise". In case this enhancement gets accepted, there should also be an inverse of "assertRaisesRegexp".
msg156752 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2012-03-25 12:03
> I don't want to simply execute the code and hope that it doesn't raise > an exception, because if it does, the test fails with an "error" status > instead of a "failed" status. So what?
msg156753 - (view) Author: Danilo Bargen (gwrtheyrn) Date: 2012-03-25 12:05
>> I don't want to simply execute the code and hope that it doesn't raise >> an exception, because if it does, the test fails with an "error" status >> instead of a "failed" status. > > So what? A buggy test is not the same thing as a test that fails because the test result did not meet your assertions.
msg156755 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2012-03-25 12:14
> >> I don't want to simply execute the code and hope that it doesn't raise > >> an exception, because if it does, the test fails with an "error" status > >> instead of a "failed" status. > > > > So what? > > A buggy test is not the same thing as a test that fails because the > test result did not meet your assertions. That's a completely meaningless difference in my experience. Raising an exception usually means the tested code is buggy, not the test. Whoever introduced this distinction probably overengineered it.
msg156757 - (view) Author: Michael Foord (michael.foord) * (Python committer) Date: 2012-03-25 13:14
The opposite of calling assertRaises is simply calling the code. A comment as to why you're calling the code is sufficient documentation as to the intent of the test. In general the difference be a test failure and error is not useful - you *still* have to look at the traceback (failure details) to see *why* the test failed / errored. I'm sure the distinction comes from JUnit that unittest was originally based on (and yes - overengineered for Python).
History
Date User Action Args
2022-04-11 14:57:28 admin set github: 58611
2017-03-07 14:13:14 r.david.murray link issue29747 superseder
2012-03-25 13:14:07 michael.foord set status: open -> closedassignee: michael.foordresolution: wont fixmessages: +
2012-03-25 12:14:38 pitrou set messages: +
2012-03-25 12:05:49 gwrtheyrn set messages: +
2012-03-25 12:03:26 pitrou set versions: + Python 3.3, - Python 2.7nosy: + michael.foord, pitroumessages: + components: + Library (Lib), - Tests
2012-03-25 11:48:51 tshepang set nosy: + tshepang
2012-03-25 11:43:50 gwrtheyrn create