[Python-Dev] unittest's redundant assertions: asserts vs. failIf/Unlesses

Steve Holden steve at holdenweb.com
Sun Jul 13 17:56:45 CEST 2008


Antoine Pitrou wrote:
> Let's split hairs a little...
> 
> Steve Holden <steve <at> holdenweb.com> writes:
>> "Fail" isn't a negative. As Guido said, it's a description of the test 
>> behavior under particular circumstances.
> 
> In most circumstances, "fail" is a negative word defined as the contrary of
> something else (that is, as the "failure to pass/succeed/perform/achieve/..."),
> while the reverse is not true (few people would define "success" or "passing a
> test" as the negative of "failure", except in desperate circumstances). Although
> I'm not a native English speaker, I don't think our respective languages and
> cultures differ on this point.
> 
"The test will fail" is an assertion (in English, not in Python :). It 
is not a negative. "The test will not fail" is an assertion containing a 
negative. "The test will not not fail" is an assertion containing a 
double negative.

> 
>> "fail_unless_equal" says quite 
>> clearly that the test requires equality of the values.
> 
> Actually, saying "that the test requires equality of the values" translates
> directly into an "assert equals" (or "enforce equals" if you want a stronger
> word) rather than a "fail if not equal". It is a grammatical fact...
> 
Right. For extra points, discuss the differences between 
"fail_unless_equal", "fail_if_not_equal", assert_equals" and 
"assert_unequal".

> In other words, if you express a requirement, you intent to say how the
> implementation under test is supposed to behave for it to be considered
> successful, not the conditions under which its behaviour constitutes a failure. 
> 
> As you said, if an exception is thrown which isn't part of the testing protocol
> (e.g. something other than an AssertionError), the test is still said to fail...
> if the intent of testing were to test for failure conditions, on the contrary,
> the test would be said to be passed (because it wouldn't have met the failure
> conditions).
> 
But Guido said:

 > I like using only the assertKeyword variants, removing assert_, fail*,
 > and assertEquals.

So we are now no longer discussing what color to paint the bike shed, we 
are discussing how to describe the color. Let's stop. This is getting silly.

regards
  Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/



More information about the Python-Dev mailing list