flake8-assertive
is a Flake8 extension that
encourages using richer, more specific unittest assertions beyond just the
typical assertEqual(a, b)
and assertTrue(x)
methods. The suggested
methods perform more precise checks and provide better failure messages than
the generic methods.
Original | Suggestion | Code |
---|---|---|
assertTrue(a == b) |
assertEqual(a, b) |
A500 |
assertTrue(a != b) |
assertNotEqual(a, b) |
A500 |
assertFalse(a == b) |
assertNotEqual(a, b) |
A500 |
assertFalse(a != b) |
assertEqual(a, b) |
A500 |
assertTrue(a < b) |
assertLess(a, b) |
A500 |
assertTrue(a <= b) |
assertLessEqual(a, b) |
A500 |
assertTrue(a > b) |
assertGreater(a, b) |
A500 |
assertTrue(a >= b) |
assertGreaterEqual(a, b) |
A500 |
assertTrue(a is b) |
assertIs(a, b) |
A501 |
assertTrue(a is not b) |
assertIsNot(a, b) |
A501 |
assertFalse(a is b) |
assertNotIs(a, b) |
A501 |
assertFalse(a is not b) |
assertIs(a, b) |
A501 |
assertTrue(a in b) |
assertIn(a, b) |
A501 |
assertTrue(a not in b) |
assertNotIn(a, b) |
A501 |
assertFalse(a in b) |
assertNotIn(a, b) |
A501 |
assertTrue(isinstance(a, b)) |
assertIsInstance(a, b) |
A501 |
assertFalse(isinstance(a, b)) |
assertNotIsInstance(a, b) |
A501 |
assertEqual(a, round(b, x)) |
assertAlmostEqual(a, b, x) |
A501 |
assertAlmostEqual(a, round(b, x)) |
assertAlmostEqual(a, b, x) |
A501 |
assertNotEqual(a, round(b, x)) |
assertNotAlmostEqual(a, b, x) |
A501 |
assertNotAlmostEqual(a, round(b, x)) |
assertNotAlmostEqual(a, b, x) |
A501 |
assertEqual(a, None) |
assertIsNone(a) |
A502 |
assertNotEqual(a, None) |
assertIsNotNone(a) |
A502 |
assertTrue(a is None) |
assertIsNone(a) |
A502 |
assertTrue(a is not None) |
assertIsNotNone(a) |
A502 |
assertFalse(a is None) |
assertIsNotNone(a) |
A502 |
assertFalse(a is not None) |
assertIsNone(a) |
A502 |
assertEqual(a, True) |
assertTrue(a) |
A502 |
assertEqual(a, False) |
assertFalse(a) |
A502 |
assertEquals(a, b) |
assertEqual(a, b) |
A503 |
assertNotEquals(a, b) |
assertNotEqual(a, b) |
A503 |
assertAlmostEquals(a, b, x) |
assertAlmostEqual(a, b, x) |
A503 |
assertNotAlmostEquals(a, b, x) |
assertNotAlmostEqual(a, b, x) |
A503 |
assertTrue(a, b) |
assertTrue(a, msg=b) |
A504 |
assertFalse(a, b) |
assertFalse(a, msg=b) |
A504 |
Note that some suggestions are normalized forms of the original, such as when
a double-negative is used (assertFalse(a != b)
→ assertEqual(a, b)
).
There aren't suggestions for things like assertFalse(a > b)
, which may or
may not be equivalent to assertLessEqual(a, b)
.
Install from PyPI using pip
:
$ pip install flake8-assertive
The extension will be activated automatically by flake8
. You can verify
that it has been loaded by inspecting the flake8 --version
string.
$ flake8 --version
4.0.1 (assertive: 2.1.0, ...) CPython 3.9.10 on Darwin
This extension adds three new error codes (using the A50
prefix):
A500
: prefer {func} for '{op}' comparisonsA501
: prefer {func} for '{op}' expressionsA502
: prefer {func} instead of comparing to {obj}A503
: use {func} instead of the deprecated {name}A504
: prefer the 'msg=' kwarg for {func} diagnostics
Configuration values are specified in the [flake8]
section of your config
file or as command line arguments (e.g. --assertive-snakecase
).
assertive-snakecase
: suggest snake_case assert method names (e.g.assert_true()
) instead of the standard names (e.g.assertTrue()
)assertive-test-pattern
: fnmatch pattern for identifying unittest test files (and all other files will be skipped)
There are some specific cases when the suggestion might not match the intent of the original.
assertEqual()
won't use the ==
operator if the comparison has been
delegated to a type-specific equalilty function. By default, this is the
case for strings, sequences, lists, tuples, sets, and dicts.
If your intent is to specifically test the ==
operator, consider writing
the assertion like this instead:
assertIs(a == b, True)
This approach has the benefit of verifying that the type's __eq__
implementation returns a boolean value. Unfortunately, it also has the
downside of reporting the result of a == b
on failure instead of the
values of a
and b
.
Suggested by: Serhiy Storchaka
- Teyit is a Python unit test formatter that can perform similar assertion transformations.