The unittest
module provides assertion methods specific to common types and operations. Both versions will test the same things, but
the dedicated one will provide a better error message, simplifying the debugging process.
This rule reports an issue when an assertion can be simplified by using a more specific function. The array below gives a list of assertions on
which an issue will be raised, and which function should be used instead:
||Original||Dedicated||
|assertTrue(x == y)
|assertEqual(x, y)
|
|assertTrue(x != y)
|assertNotEqual(x, y)
|
|assertFalse(x == y)
|assertNotEqual(x, y)
|
|assertFalse(x != y)
|assertEqual(x, y)
|
|assertTrue(x < y)
|assertLess(x, y)
|
|assertTrue(x <= y)
|assertLessEqual(x, y)
|
|assertTrue(x > y)
|assertGreater(x, y)
|
|assertTrue(x >= y)
|assertGreaterEqual(x, y)
|
|assertTrue(x is y)
|assertIs(x, y)
|
|assertTrue(x is not y)
|assertIsNot(x, y)
|
|assertFalse(x is y)
|assertIsNot(x, y)
|
|assertFalse(x is not y)
|assertIs(x, y)
|
|assertTrue(x in y)
|assertIn(x, y)
|
|assertFalse(x in y)
|assertNotIn(x, y)
|
|assertTrue(isinstance(x, y))
|assertIsInstance(x, y)
|
|assertFalse(isinstance(x, y))
|assertNotIsInstance(x, y)
|
|assertEqual(x, round(y, z))
|assertAlmostEqual(x, y, z)
|
|assertAlmostEqual(x, round(y, z))
|assertAlmostEqual(x, y, z)
|
|assertNotEqual(x, round(y, z))
|assertNotAlmostEqual(x, y, z)
|
|assertNotAlmostEqual(x, round(y, z))
|assertNotAlmostEqual(x, y, z)
|
|assertEqual(x, None)
|assertIsNone(x)
|
|assertNotEqual(x, None)
|assertIsNotNone(x)
|
|assertTrue(x is None)
|assertIsNone(x)
|
|assertTrue(x is not None)
|assertIsNotNone(x)
|
|assertFalse(x is None)
|assertIsNotNone(x)
|
|assertFalse(x is not None)
|assertIsNone(x)
|
|assertEqual(x, True)
|assertTrue(x)
|
|assertEqual(x, False)
|assertFalse(x)
|
Noncompliant code example
import unittest
class SomeTest(unittest.TestCase):
def test_something(self):
x = foo()
y = bar()
self.assertFalse(x == y) # Noncompliant
self.assertTrue(x < y) # Noncompliant
Compliant solution
class SomeTest(unittest.TestCase):
def test_something(self):
x = foo()
y = bar()
self.assertNotEqual(x, y)
self.assertLess(x, y)