Assertions are meant to detect when code behaves as expected. An assertion which fails or succeeds all the time should be fixed.


This rule raises an issue when an assertion method is given parameters which will make it succeed or fail all the time. It covers three cases:

* an ``++assert++`` statement or a unittest's ``++assertTrue++`` or ``++assertFalse++`` method is called with a value which will be always True or always False.
* a unittest's ``++assertIsNotNone++`` or ``++assertIsNone++`` method is called with a value which will be always None or never None.
* a unittest's ``++assertIsNot++`` or ``++assertIs++`` method is called with a literal expression creating a new object every time (ex: ``++[1, 2, 3]++``).


== Noncompliant Code Example

----
import unittest

class MyTestCase(unittest.TestCase):
    def expect_fail1(self):
        assert False

    def expect_fail2(self):
        self.assertTrue(False)  # Noncompliant. This assertion always fails.

    def expect_not_none(self):
        self.assertIsNotNone(round(1.5))  # Noncompliant. This assertion always succeeds because "round" returns a number, not None.

    def helper_compare(param):
        self.assertIs(param, [1, 2, 3])  # Noncompliant. This assertion always fails because [1, 2, 3] creates a new object.
----


== Compliant Solution

----
import unittest

class MyTestCase(unittest.TestCase):
    def expect_fail(self):
        self.fail("This is expected")

    def expect_not_none(self):
        self.assertNotEqual(round(1.5), 0)

    def helper_compare(param):
        self.assertEqual(param, [1, 2, 3])
----


== See

* https://docs.python.org/3/library/unittest.html[Python documentation - the ``++unittest++`` module]
* https://docs.python.org/3/reference/simple_stmts.html#the-assert-statement[Python documentation - the ``++assert++`` statement]


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::message.adoc[]

include::highlighting.adoc[]

'''
== Comments And Links
(visible only on this page)

include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]
