是否有一个python assert()方法检查两个边界?

时间:2011-09-20 09:17:38

标签: python unit-testing

在我正在进行的某些单元测试中,当变量位于两个边界条件之间时,我需要通过测试。

像 -

def myTest(self):
    myInt = 5
    self.assertBetween(myInt,3,8)

将通过测试。或者,如果myInt在3到8的范围之外撒谎,它将失败。

我已经查看了python文档中的断言方法列表,但无法确定哪一个会给我这种功能。

感谢。

4 个答案:

答案 0 :(得分:21)

您可以将assertTrue()用于此目的:

self.assertTrue(myInt >= 3 and myInt <= 8)

或者,使用Python的比较链式成语:

self.assertTrue(3 <= myInt <= 8)

答案 1 :(得分:17)

Frédéric's suggestion使用:

self.assertTrue(3 <= myInt <= 8)

导致测试输出如下:

AssertionError: False is not True

这使得开发人员无法确定myInt的实际问​​题是什么。最好是啰嗦:

self.assertGreaterEqual(myInt, 3)
self.assertLessEqual(myInt, 8)

因为那样你得到有用的测试输出:

AssertionError: 21 not less than or equal to 8

如果你发现自己经常使用这个习语,那么你可以编写自己的断言方法:

def assertBetween(self, value, min, max):
    """Fail if value is not between min and max (inclusive)."""
    self.assertGreaterEqual(value, min)
    self.assertLessEqual(value, max)

请注意,如果要测试的值是整数,那么您可以将assertInrange一起使用:

self.assertIn(myInt, range(3, 9))

导致测试输出如下:

AssertionError: 21 not found in range(3, 9)

答案 2 :(得分:7)

为了补充答案,你可以在self.assertTrue中添加一个msg并使其更具可读性

所以

self.assertTrue(3 <= myInt <= 8, msg="%i is not between 3 and 8" % myInt)

会产生正确的输出,您不需要assertGreaterEqualassertLessEqual

答案 3 :(得分:1)

assertAlmostEqual主要用例是比较浮点数。但是使用delta参数,您可以将其用于整数:

self.assertAlmostEqual(9, 5, delta=3)

这会为您提供有意义的错误消息:

AssertionError: 9 != 5 within 3 delta