74 lines
2.1 KiB
Plaintext
74 lines
2.1 KiB
Plaintext
== Why is this an issue?
|
|
|
|
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
|
|
|
|
[source,python]
|
|
----
|
|
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
|
|
|
|
[source,python]
|
|
----
|
|
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])
|
|
----
|
|
|
|
|
|
== Resources
|
|
|
|
* 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[]
|