[Python-Dev] unittest's redundant assertions: asserts vs. failIf/Unlesses
Ron Adam
rrr at ronadam.com
Sun Jul 13 20:55:24 CEST 2008
Antoine Pitrou wrote:
> Ben Finney <bignose+hates-spam <at> benfinney.id.au> writes:
>> That would better be written (preferring PEP 8 names)
>> "fail_unless_equal".
>
> Which is still a double negative ("fail" and "unless" are both negative words).
>
>> That's another reason to avoid "assert" in the name: these methods
>> *don't* necessarily use the 'assert' statement.
>
> But all those constructs (assert, assertEqual, etc.) raise the same exception
> type named AssertionError which, if you care for naming consistency, is more
> important than whether or not they are implemented in terms of each other. :-)
Regarding: "all those constructs ... raise the same exception type named
AssertionError.."
As an experiment a while back (out of frustration), I created some tests
that used more specific (local unittest module only) exceptions. The
clarity of the failed errors and the mental effort to debug the problems
was much improved for me.
I sub-classed unittest.TestCase, and added two new methods and a few local
and unique test-only exceptions.
* test -> a test function to call
* ref -> addition helpful debug info
assertTestReturns(test, expect, ref="")
raises on failure:
Wrong_Result_Returned
Unexpected_Exception_Raised
assertTestRaises(test, expect, ref="")
raises on failure:
No_Exception_Raised
Wrong_Exception_Raised
These more specific exceptions (over plain AssertionError), allowed for
more specific error reports.
A testcase with an error would produce a standard python exception so you
know instantly that you need to fix the test rather than the code being tested.
Also the more specific exception code can better handle some cases where a
wrong traceback would be returned. ie.. the test code traceback rather
than the code being tested traceback.
Is there any interest in going in this direction with unittests?
Ron
More information about the Python-Dev
mailing list