Why is this an issue?

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)

Resources

Python documentation - the unittest module