不精确断言¶
ID: py/imprecise-assert
Kind: problem
Security severity:
Severity: recommendation
Precision: very-high
Tags:
- maintainability
- testability
Query suites:
- python-security-and-quality.qls
类 unittest.TestCase
提供了一系列断言方法。除了通用形式 assertTrue()
和 assertFalse()
之外,还提供了更具体的形式,例如 assertGreaterEquals()
和 assertNotIn()
。通过使用更具体的形式,可以在测试失败时获得更精确和信息丰富的错误消息。这可以加快调试过程。
建议¶
将所有不提供自定义错误消息的 assertTrue()
和 assertFalse()
调用替换为更具体的变体。或者,使用 assertTrue(condition, message)
形式提供定制的错误消息。
示例¶
在这个例子中,使用了 assertTrue()
和 assertFalse()
。
from unittest import TestCase
class MyTest(TestCase):
def testInts(self):
self.assertTrue(1 == 1)
self.assertFalse(1 > 2)
self.assertTrue(1 in []) #This will fail
当 self.assertTrue(1 in [])
失败时,这将难以确定出了什么问题。错误消息“AssertionError: False is not true” 并没有什么帮助。
通过将断言更改为更具体的形式,可以在以下示例中生成更实用的错误消息。
from unittest import TestCase
class MyTest(TestCase):
def testInts(self):
self.assertEqual(1, 1)
self.assertLessEqual(1, 2)
self.assertIn(1, []) #This will fail
在这种情况下,错误消息“AssertionError: 1 not found in []” 更有信息量。
参考¶
Python 库参考:TestCase.assertEqual.