org.sonar.l10n.py.rules.python.S5845.html Maven / Gradle / Ivy
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