All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sonar.l10n.py.rules.python.S5845.html Maven / Gradle / Ivy

There is a newer version: 4.23.0.17664
Show newest version

Why is this an issue?

Calling unittest methods assertEqual, assertNotEqual, assertIs or assertIsNot on objects of incompatible types will always fail or always succeed.

For methods assertEqual and assertNotEqual, arguments' types are incompatible if:

they are unrelated builtin types such as string and integer.
they are instances of unrelated classes which do not implement ``++__eq__++`` or ``++__ne__++`` (if a class implements one of these methods it could compare to any other type it wants).

As for methods assertIs and assertIsNot, if arguments' types are different it is not possible for them to point to the same object, thus assertIs will always fail and assertIsNot will always succeed.

Noncompliant code example

import unittest
class A(): ...
class MyTest(unittest.TestCase):
  def test_something(self):
    a = A()
    mydict = {"x": a}
    self.assertEqual(a, "x")  # Noncompliant
    self.assertIs(a, "x")  # Noncompliant

Compliant solution

import unittest
class A(): ...
class MyTest(unittest.TestCase):
  def test_something(self):
    a = A()
    mydict = {"x": a}
    self.assertEqual(a, mydict["x"])  # OK
    self.assertIs(a, mydict["x"])  # OK

Resources

  • {rule:python:S2159} Silly equality checks should not be made
  • {rule:python:S3403} Identity operators should not be used with dissimilar types




© 2015 - 2024 Weber Informatics LLC | Privacy Policy