summaryrefslogtreecommitdiffstats
path: root/Lib/unittest
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2017-05-01 16:18:56 (GMT)
committerGitHub <noreply@github.com>2017-05-01 16:18:56 (GMT)
commit5d7a8d0c13737fd531b722ad76c505ef47aac96a (patch)
tree2ad8be6cb6bc56b9e8847468aad7edb1416472b5 /Lib/unittest
parent1374dbb6940f29c49c2966551a06015857c942cc (diff)
downloadcpython-5d7a8d0c13737fd531b722ad76c505ef47aac96a.zip
cpython-5d7a8d0c13737fd531b722ad76c505ef47aac96a.tar.gz
cpython-5d7a8d0c13737fd531b722ad76c505ef47aac96a.tar.bz2
bpo-30190: improved error msg for assertAlmostEqual(delta=...) (#1331)
* #30190 / unittest / assertAlmostEqual(delta=...) / error msg: show the difference between the 2 numbers in case of failure * safe_repr() diff * also show difference when passing 'places' argument * refactoring * update Misc/NEWS
Diffstat (limited to 'Lib/unittest')
-rw-r--r--Lib/unittest/case.py35
-rw-r--r--Lib/unittest/test/test_assertions.py8
2 files changed, 26 insertions, 17 deletions
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index f4dbc52..993aaec 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -856,23 +856,28 @@ class TestCase(object):
if delta is not None and places is not None:
raise TypeError("specify delta or places not both")
+ diff = abs(first - second)
if delta is not None:
- if abs(first - second) <= delta:
+ if diff <= delta:
return
- standardMsg = '%s != %s within %s delta' % (safe_repr(first),
- safe_repr(second),
- safe_repr(delta))
+ standardMsg = '%s != %s within %s delta (%s difference)' % (
+ safe_repr(first),
+ safe_repr(second),
+ safe_repr(delta),
+ safe_repr(diff))
else:
if places is None:
places = 7
- if round(abs(second-first), places) == 0:
+ if round(diff, places) == 0:
return
- standardMsg = '%s != %s within %r places' % (safe_repr(first),
- safe_repr(second),
- places)
+ standardMsg = '%s != %s within %r places (%s difference)' % (
+ safe_repr(first),
+ safe_repr(second),
+ places,
+ safe_repr(diff))
msg = self._formatMessage(msg, standardMsg)
raise self.failureException(msg)
@@ -890,16 +895,19 @@ class TestCase(object):
"""
if delta is not None and places is not None:
raise TypeError("specify delta or places not both")
+ diff = abs(first - second)
if delta is not None:
- if not (first == second) and abs(first - second) > delta:
+ if not (first == second) and diff > delta:
return
- standardMsg = '%s == %s within %s delta' % (safe_repr(first),
- safe_repr(second),
- safe_repr(delta))
+ standardMsg = '%s == %s within %s delta (%s difference)' % (
+ safe_repr(first),
+ safe_repr(second),
+ safe_repr(delta),
+ safe_repr(diff))
else:
if places is None:
places = 7
- if not (first == second) and round(abs(second-first), places) != 0:
+ if not (first == second) and round(diff, places) != 0:
return
standardMsg = '%s == %s within %r places' % (safe_repr(first),
safe_repr(second),
@@ -908,7 +916,6 @@ class TestCase(object):
msg = self._formatMessage(msg, standardMsg)
raise self.failureException(msg)
-
def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None):
"""An equality assertion for ordered sequences (like lists and tuples).
diff --git a/Lib/unittest/test/test_assertions.py b/Lib/unittest/test/test_assertions.py
index 31565da..b046669e 100644
--- a/Lib/unittest/test/test_assertions.py
+++ b/Lib/unittest/test/test_assertions.py
@@ -223,9 +223,11 @@ class TestLongMessage(unittest.TestCase):
"^1 == 1 : oops$"])
def testAlmostEqual(self):
- self.assertMessages('assertAlmostEqual', (1, 2),
- ["^1 != 2 within 7 places$", "^oops$",
- "^1 != 2 within 7 places$", "^1 != 2 within 7 places : oops$"])
+ self.assertMessages(
+ 'assertAlmostEqual', (1, 2),
+ ["^1 != 2 within 7 places \(1 difference\)$", "^oops$",
+ "^1 != 2 within 7 places \(1 difference\)$",
+ "^1 != 2 within 7 places \(1 difference\) : oops$"])
def testNotAlmostEqual(self):
self.assertMessages('assertNotAlmostEqual', (1, 1),