Guido van Rossum wrote:
On Wed, Jul 16, 2008 at 2:03 PM, Raymond Hettinger <[EMAIL PROTECTED]> wrote:
From: "Michael Foord" <[EMAIL PROTECTED]>
assertIn / assertNotIn I use very regularly for collection membership
- self.assert_(func(x) in result_set)
+ self.assertIn(func(x), result_set)

Yawn.  The gain is zero.  Actually, it's negative because the second
doesn't read as nicely as the pure python expression.

I disagree. The reason why we have assertEquals(x, y) is that the
error message can show the values of x and y, whereas assert x == y
can't show those. Showing the values can be tremendously useful to
debugging the failure. (Doing an intelligent comparison, e.g. a string
or list "diff" instead of showing the two values, can be even more
useful, and I'd be in favor of that rather than adding new methods
like assertListsEqual.)

(Titus asks if the assert statement could be adjusted to do better
reporting. But that's not going to happen -- it would require a
tremendous amount of compiler support that would have to be
implemented in every Python implementation (last I counted there were
at least five). In addition, python -O removes all asserts from your
code -- that's why we use assertXxx functions in the first place.)

The assert statement itself does not have to be modified. nose and py.test are already capable of picking out the variables used in a failing assert expression and print them out. For example:


[~]$ cat test_nicefail.py
def test_nicefail():
    x = 12
    assert x == 10

[~]$ nosetests --detailed-errors test_nicefail.py
F
======================================================================
FAIL: test_nicefail.test_nicefail
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/nose-0.10.3-py2.5.egg/nose/case.py", line 182, in runTest
    self.test(*self.arg)
  File "/Users/rkern/test_nicefail.py", line 3, in test_nicefail
    assert x == 10
AssertionError:
    12 = 12
>>  assert 12 == 10


----------------------------------------------------------------------
Ran 1 test in 0.044s

FAILED (failures=1)


[~]$ py.test test_nicefail.py
====================== test process starts =======================
executable: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python (2.5.1-final-0) using py lib: /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/py <rev unknown>

test_nicefail.py[1] F

__________________________________________________________________
___________________ entrypoint: test_nicefail ____________________

    def test_nicefail():
        x = 12
E       assert x == 10
>       assert 12 == 10

[/Users/rkern/test_nicefail.py:3]
__________________________________________________________________
============ tests finished: 1 failed in 0.09 seconds ============

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to